diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@
    - Defined in: src/pixi/InteractionManager.js:506 + Defined in: src/pixi/InteractionManager.js:513
    @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; - diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    
    diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js
    index bffc822..8d55f77 100644
    --- a/bin/pixi.dev.js
    +++ b/bin/pixi.dev.js
    @@ -152,7 +152,6 @@
     	return new PIXI.Polygon(points);
     }
     
    -// constructor
     PIXI.Polygon.constructor = PIXI.Polygon;
     
     
    @@ -5035,7 +5034,7 @@
      * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
      * @class Spine
      * @constructor
    - * @extends 
    + * @extends DisplayObjectContainer
      * @param {String} url the url of the spine anim file to be used
      */
     PIXI.Spine = function(url)
    @@ -7528,7 +7527,7 @@
      * When loaded this class will dispatch a "loaded" event
      * @class Spine
      * @constructor
    - * @extends 
    + * @extends EventTarget
      * @param {String} url the url of the sprite sheet JSON file
      * @param {Boolean} crossorigin
      */
    diff --git a/docs/api.js b/docs/api.js
    index 92dc334..0f832c8 100644
    --- a/docs/api.js
    +++ b/docs/api.js
    @@ -12,10 +12,13 @@
             "ImageLoader",
             "InteractionData",
             "InteractionManager",
    +        "JsonLoader",
             "MovieClip",
             "Point",
    +        "Polygon",
             "Rectangle",
             "RenderTexture",
    +        "Spine",
             "Sprite",
             "SpriteSheetLoader",
             "Stage",
    diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html
    index 6c910a5..92a3256 100644
    --- a/docs/classes/AssetLoader.html
    +++ b/docs/classes/AssetLoader.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/bin/pixi.dev.js b/bin/pixi.dev.js index bffc822..8d55f77 100644 --- a/bin/pixi.dev.js +++ b/bin/pixi.dev.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/docs/api.js b/docs/api.js index 92dc334..0f832c8 100644 --- a/docs/api.js +++ b/docs/api.js @@ -12,10 +12,13 @@ "ImageLoader", "InteractionData", "InteractionManager", + "JsonLoader", "MovieClip", "Point", + "Polygon", "Rectangle", "RenderTexture", + "Spine", "Sprite", "SpriteSheetLoader", "Stage", diff --git a/docs/classes/AssetLoader.html b/docs/classes/AssetLoader.html index 6c910a5..92a3256 100644 --- a/docs/classes/AssetLoader.html +++ b/docs/classes/AssetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; iInteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -401,7 +407,7 @@ - src/pixi/loaders/AssetLoader.js:43 + src/pixi/loaders/AssetLoader.js:46

    @@ -444,7 +450,7 @@ - src/pixi/loaders/AssetLoader.js:38 + src/pixi/loaders/AssetLoader.js:41

    diff --git a/docs/classes/BaseTexture.html b/docs/classes/BaseTexture.html index d3c6c65..8635994 100644 --- a/docs/classes/BaseTexture.html +++ b/docs/classes/BaseTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -377,7 +383,7 @@ - src/pixi/textures/BaseTexture.js:103 + src/pixi/textures/BaseTexture.js:101

    diff --git a/docs/classes/BitmapFontLoader.html b/docs/classes/BitmapFontLoader.html index 75c96bb..1446b4d 100644 --- a/docs/classes/BitmapFontLoader.html +++ b/docs/classes/BitmapFontLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/BitmapText.html b/docs/classes/BitmapText.html index 4786ad3..5bd93e7 100644 --- a/docs/classes/BitmapText.html +++ b/docs/classes/BitmapText.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -625,7 +631,7 @@
    - +
    @@ -715,7 +721,7 @@
    - +
    @@ -730,7 +736,7 @@
    - +
    @@ -814,7 +820,7 @@
    - +
    @@ -898,7 +904,7 @@
    - +
    @@ -982,7 +988,7 @@
    - +
    @@ -1066,7 +1072,7 @@
    - +
    @@ -1150,7 +1156,7 @@
    - +
    @@ -1235,7 +1241,7 @@
    - +
    @@ -1320,7 +1326,7 @@
    - +
    @@ -1404,7 +1410,7 @@
    - +
    @@ -1488,7 +1494,7 @@
    - +
    @@ -1783,7 +1789,7 @@
    - +
    @@ -1798,7 +1804,7 @@
    - +
    @@ -1883,7 +1889,7 @@
    - +
    @@ -1967,7 +1973,7 @@
    - +
    @@ -2052,7 +2058,7 @@
    - +
    @@ -2136,7 +2142,7 @@
    - +
    diff --git a/docs/classes/CanvasRenderer.html b/docs/classes/CanvasRenderer.html index ceb9f1e..ec90416 100644 --- a/docs/classes/CanvasRenderer.html +++ b/docs/classes/CanvasRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/CustomRenderable.html b/docs/classes/CustomRenderable.html index 349a9bc..86c0ec9 100644 --- a/docs/classes/CustomRenderable.html +++ b/docs/classes/CustomRenderable.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/DisplayObject.html b/docs/classes/DisplayObject.html index 6fceb87..d9531c8 100644 --- a/docs/classes/DisplayObject.html +++ b/docs/classes/DisplayObject.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -642,7 +648,7 @@
    - +
    @@ -729,7 +735,7 @@
    - +
    @@ -816,7 +822,7 @@
    - +
    @@ -903,7 +909,7 @@
    - +
    @@ -991,7 +997,7 @@
    - +
    @@ -1079,7 +1085,7 @@
    - +
    @@ -1166,7 +1172,7 @@
    - +
    @@ -1254,7 +1260,7 @@
    - +
    @@ -1341,7 +1347,7 @@
    - +
    @@ -1429,7 +1435,7 @@
    - +
    @@ -1516,7 +1522,7 @@
    - +
    diff --git a/docs/classes/DisplayObjectContainer.html b/docs/classes/DisplayObjectContainer.html index aeb4d04..0d1e17b 100644 --- a/docs/classes/DisplayObjectContainer.html +++ b/docs/classes/DisplayObjectContainer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -526,7 +532,7 @@
    - +
    @@ -619,7 +625,7 @@
    - +
    @@ -634,7 +640,7 @@
    - +
    @@ -718,7 +724,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -889,7 +895,7 @@
    - +
    @@ -973,7 +979,7 @@
    - +
    @@ -1057,7 +1063,7 @@
    - +
    @@ -1142,7 +1148,7 @@
    - +
    @@ -1227,7 +1233,7 @@
    - +
    @@ -1314,7 +1320,7 @@
    - +
    @@ -1398,7 +1404,7 @@
    - +
    @@ -1491,7 +1497,7 @@
    - +
    @@ -1506,7 +1512,7 @@
    - +
    @@ -1591,7 +1597,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1760,7 +1766,7 @@
    - +
    @@ -1844,7 +1850,7 @@
    - +
    diff --git a/docs/classes/ImageLoader.html b/docs/classes/ImageLoader.html index bd2dfe3..cab9245 100644 --- a/docs/classes/ImageLoader.html +++ b/docs/classes/ImageLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/InteractionData.html b/docs/classes/InteractionData.html index 3a4c57c..4c26c7c 100644 --- a/docs/classes/InteractionData.html +++ b/docs/classes/InteractionData.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -136,7 +142,7 @@ @@ -190,7 +196,7 @@ - src/pixi/InteractionManager.js:506 + src/pixi/InteractionManager.js:513

    @@ -329,7 +335,7 @@ - src/pixi/InteractionManager.js:530 + src/pixi/InteractionManager.js:537

    @@ -418,7 +424,7 @@ - src/pixi/InteractionManager.js:512 + src/pixi/InteractionManager.js:519

    @@ -462,7 +468,7 @@ - src/pixi/InteractionManager.js:522 + src/pixi/InteractionManager.js:529

    diff --git a/docs/classes/InteractionManager.html b/docs/classes/InteractionManager.html index 49802df..9669e2e 100644 --- a/docs/classes/InteractionManager.html +++ b/docs/classes/InteractionManager.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/JsonLoader.html b/docs/classes/JsonLoader.html new file mode 100644 index 0000000..a97880a --- /dev/null +++ b/docs/classes/JsonLoader.html @@ -0,0 +1,331 @@ + + + + + JsonLoader - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    JsonLoader Class

    +
    + + + +
    + Extends EventTarget +
    + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The json file loader is used to load in JSON data and parsing it +When loaded this class will dispatch a "loaded" event +If load failed this class will dispatch a "error" event

    +
    + + +
    +

    Constructor

    +
    +

    JsonLoader

    + + +
    + (
      + +
    • + + url + +
    • + +
    • + + crossorigin + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/JsonLoader.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the JSON file

      +
      + + +
    • + +
    • + + crossorigin + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + + + + + + + +
    + + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/MovieClip.html b/docs/classes/MovieClip.html index 7195e7d..229a09b 100644 --- a/docs/classes/MovieClip.html +++ b/docs/classes/MovieClip.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -668,7 +674,7 @@
    - +
    @@ -758,7 +764,7 @@
    - +
    @@ -773,7 +779,7 @@
    - +
    @@ -857,7 +863,7 @@
    - +
    @@ -941,7 +947,7 @@
    - +
    @@ -1199,7 +1205,7 @@
    - +
    @@ -1283,7 +1289,7 @@
    - +
    @@ -1367,7 +1373,7 @@
    - +
    @@ -1452,7 +1458,7 @@
    - +
    @@ -1537,7 +1543,7 @@
    - +
    @@ -1675,7 +1681,7 @@
    - +
    @@ -1759,7 +1765,7 @@
    - +
    @@ -1987,7 +1993,7 @@
    - +
    @@ -2002,7 +2008,7 @@
    - +
    @@ -2087,7 +2093,7 @@
    - +
    @@ -2171,7 +2177,7 @@
    - +
    @@ -2256,7 +2262,7 @@
    - +
    @@ -2340,7 +2346,7 @@
    - +
    diff --git a/docs/classes/Point.html b/docs/classes/Point.html index 7f33e69..87114ce 100644 --- a/docs/classes/Point.html +++ b/docs/classes/Point.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Polygon.html b/docs/classes/Polygon.html new file mode 100644 index 0000000..6669a83 --- /dev/null +++ b/docs/classes/Polygon.html @@ -0,0 +1,396 @@ + + + + + Polygon - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Polygon Class

    +
    + + + + + +
    + Defined in: src/pixi/Polygon.js:5 +
    + + + + + Module: PIXI + + + + +
    + + + +
    + +
    + + +
    +

    Constructor

    +
    +

    Polygon

    + + +
    + (
      + +
    • + + points + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:5 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + points + Array + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + +
      + +
    • + clone + + + +
    • + +
    +
    + + + + + + + +
    + + +
    +

    Methods

    + + +
    +

    clone

    + + + () + + + + + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/Polygon.js:15 + +

    + + + + + +
    + +
    + +
    + + + + +
    +

    Returns:

    + +
    + + + a copy of the polygon + +
    +
    + + + +
    + + +
    + + + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Rectangle.html b/docs/classes/Rectangle.html index c8ebb0a..18a02b4 100644 --- a/docs/classes/Rectangle.html +++ b/docs/classes/Rectangle.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/RenderTexture.html b/docs/classes/RenderTexture.html index 7c3b84f..7e465aa 100644 --- a/docs/classes/RenderTexture.html +++ b/docs/classes/RenderTexture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -547,7 +553,7 @@
    -

    If true the texture will not be cleared before the displayObject is drawn

    +

    If true the texture will be cleared before the displayObject is drawn

    diff --git a/docs/classes/Spine.html b/docs/classes/Spine.html new file mode 100644 index 0000000..5ef8e25 --- /dev/null +++ b/docs/classes/Spine.html @@ -0,0 +1,2376 @@ + + + + + Spine - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    Spine Class

    +
    + + + + + + + + + + + + + Module: PIXI + + + + +
    + + + +
    +

    The Spine loader is used to load in JSON spine data +To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format +Due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load +See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source +You will need to generate a sprite sheet to accompany the spine data +When loaded this class will dispatch a "loaded" event

    +
    + + +
    +

    Constructor

    +
    +

    Spine

    + + +
    + (
      + +
    • + + url + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + + +

    + + Defined in + + + + + src/pixi/loaders/SpineLoader.js:10 + +

    + + + + + +
    + +
    + +
    + + +
    +

    Parameters:

    + +
      + +
    • + + url + String + + + + +
      +

      the url of the spine anim file to be used

      +
      + + +
    • + +
    +
    + + + + + +
    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Methods

    + + +
    + + + +
    +

    Properties

    + + +
    + + + + + +
    + + +
    +

    Methods

    + + +
    +

    addChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:41 + +

    + + + + + +
    + +
    +

    Adds a child to the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    addChildAt

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:73 + +

    + + + + + +
    + +
    +

    Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + DisplayObject + DisplayObject + + + + +
      + +
      + + +
    • + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    click

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:106 + +

    + + + + + +
    + +
    +

    A callback that is used when the users clicks on the displayObject with their mouse

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    getChildAt

    + + +
    + (
      + +
    • + + index + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:168 + +

    + + + + + +
    + +
    +

    Returns the Child at the specified index

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + index + Number + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    mousedown

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:112 + +

    + + + + + +
    + +
    +

    A callback that is used when the user clicks the mouse down over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseout

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:138 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse leaves the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseover

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:132 + +

    + + + + + +
    + +
    +

    A callback that is used when the users mouse rolls over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseup

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:118 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject +for this callback to be fired the mouse must have been pressed down over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    mouseupoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:125 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject +for this callback to be fired, The touch must have started over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    removeChild

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:186 + +

    + + + + + +
    + +
    +

    Removes a child from the container.

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    setInteractive

    + + +
    + (
      + +
    • + + interactive + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:190 + +

    + + + + + +
    + +
    +

    Indicates if the sprite will have touch and mouse interactivity. It is false by default

    +
    + + +
    +

    Parameters:

    + +
      + +
    • + + interactive + Boolean + + + + +
      + +
      + + +
    • + +
    +
    + + + + + +
    + + +
    +

    swapChildren

    + + +
    + (
      + +
    • + + DisplayObject + +
    • + +
    • + + DisplayObject2 + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:128 + +

    + + + + + +
    + +
    +

    Swaps the depth of 2 displayObjects

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    tap

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:149 + +

    + + + + + +
    + +
    +

    A callback that is used when the users taps on the sprite with their finger +basically a touch version of click

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchend

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:162 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases a touch over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchendoutside

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:168 + +

    + + + + + +
    + +
    +

    A callback that is used when the user releases the touch that was over the displayObject +for this callback to be fired, The touch must have started over the sprite

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    +

    touchstart

    + + +
    + (
      + +
    • + + interactionData + +
    • + +
    ) +
    + + + + + + + + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:156 + +

    + + + + + +
    + +
    +

    A callback that is used when the user touch's over the displayObject

    +
    + + +
    +

    Parameters:

    + + +
    + + + + + +
    + + +
    + + + +
    +

    Properties

    + + +
    +

    alpha

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:40 + +

    + + + + +
    + +
    +

    The opacity of the object.

    +
    + + + + + + +
    + + +
    +

    buttonMode

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:95 + +

    + + + + +
    + +
    +

    This is used to indicate if the displayObject should display a mouse hand cursor on rollover

    +
    + + + + + + +
    + + +
    +

    children

    + Array + + + + + + + + + +
    + + +

    Inherited from + DisplayObjectContainer: + + + + src/pixi/DisplayObjectContainer.js:16 + +

    + + + + +
    + +
    +

    [read-only] The of children of this container.

    +
    + + + + + + +
    + + +
    +

    hitArea

    + Rectangle + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:69 + +

    + + + + +
    + +
    +

    This is the defined area that will pick up mouse / touch events. It is null by default. +Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children)

    +
    + + + + + + +
    + + +
    +

    parent

    + DisplayObjectContainer + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:55 + +

    + + + + +
    + +
    +

    [read-only] The display object container that contains this display object.

    +
    + + + + + + +
    + + +
    +

    pivot

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:26 + +

    + + + + +
    + +
    +

    The pivot point of the displayObject that it rotates around

    +
    + + + + + + +
    + + +
    +

    position

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:12 + +

    + + + + +
    + +
    +

    The coordinate of the object relative to the local coordinates of the parent.

    +
    + + + + + + +
    + + +
    +

    rotation

    + Number + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:33 + +

    + + + + +
    + +
    +

    The rotation of the object in radians.

    +
    + + + + + + +
    + + +
    +

    scale

    + Point + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:19 + +

    + + + + +
    + +
    +

    The scale factor of the object.

    +
    + + + + + + +
    + + +
    +

    stage

    + Stage + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:62 + +

    + + + + +
    + +
    +

    [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage.

    +
    + + + + + + +
    + + +
    +

    visible

    + Boolean + + + + + + + + + +
    + + +

    Inherited from + DisplayObject: + + + + src/pixi/DisplayObject.js:47 + +

    + + + + +
    + +
    +

    The visibility of the object.

    +
    + + + + + + +
    + + +
    + + + + + +
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/classes/Sprite.html b/docs/classes/Sprite.html index a5fd1f4..1219a2e 100644 --- a/docs/classes/Sprite.html +++ b/docs/classes/Sprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -616,7 +622,7 @@
    - +
    @@ -706,7 +712,7 @@
    - +
    @@ -721,7 +727,7 @@
    - +
    @@ -805,7 +811,7 @@
    - +
    @@ -1103,7 +1109,7 @@
    - +
    @@ -1187,7 +1193,7 @@
    - +
    @@ -1271,7 +1277,7 @@
    - +
    @@ -1355,7 +1361,7 @@
    - +
    @@ -1440,7 +1446,7 @@
    - +
    @@ -1525,7 +1531,7 @@
    - +
    @@ -1609,7 +1615,7 @@
    - +
    @@ -1693,7 +1699,7 @@
    - +
    @@ -1870,7 +1876,7 @@
    - +
    @@ -1885,7 +1891,7 @@
    - +
    @@ -1970,7 +1976,7 @@
    - +
    @@ -2054,7 +2060,7 @@
    - +
    @@ -2139,7 +2145,7 @@
    - +
    @@ -2223,7 +2229,7 @@
    - +
    diff --git a/docs/classes/SpriteSheetLoader.html b/docs/classes/SpriteSheetLoader.html index d90b3ea..30efbcc 100644 --- a/docs/classes/SpriteSheetLoader.html +++ b/docs/classes/SpriteSheetLoader.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/Stage.html b/docs/classes/Stage.html index 858841a..fe5c754 100644 --- a/docs/classes/Stage.html +++ b/docs/classes/Stage.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -598,7 +604,7 @@
    - +
    @@ -688,7 +694,7 @@
    - +
    @@ -703,7 +709,7 @@
    - +
    @@ -787,7 +793,7 @@
    - +
    @@ -871,7 +877,7 @@
    - +
    @@ -923,7 +929,7 @@ - src/pixi/Stage.js:72 + src/pixi/Stage.js:76

    @@ -1026,7 +1032,7 @@
    - +
    @@ -1110,7 +1116,7 @@
    - +
    @@ -1194,7 +1200,7 @@
    - +
    @@ -1279,7 +1285,7 @@
    - +
    @@ -1364,7 +1370,7 @@
    - +
    @@ -1448,7 +1454,7 @@
    - +
    @@ -1506,7 +1512,7 @@ - src/pixi/Stage.js:61 + src/pixi/Stage.js:63

    @@ -1619,7 +1625,7 @@
    - +
    @@ -1709,7 +1715,7 @@
    - +
    @@ -1724,7 +1730,7 @@
    - +
    @@ -1809,7 +1815,7 @@
    - +
    @@ -1893,7 +1899,7 @@
    - +
    @@ -1978,7 +1984,7 @@
    - +
    @@ -2062,7 +2068,7 @@
    - +
    @@ -2110,7 +2116,7 @@ - src/pixi/Stage.js:38 + src/pixi/Stage.js:40

    diff --git a/docs/classes/Text.html b/docs/classes/Text.html index 21effaa..9c342b1 100644 --- a/docs/classes/Text.html +++ b/docs/classes/Text.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -331,6 +337,34 @@ +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -701,7 +735,7 @@
    - +
    @@ -791,7 +825,7 @@
    - +
    @@ -806,7 +840,7 @@
    - +
    @@ -890,7 +924,7 @@
    - +
    @@ -974,7 +1008,7 @@
    - +
    @@ -1058,7 +1092,7 @@
    - +
    @@ -1142,7 +1176,7 @@
    - +
    @@ -1226,7 +1260,7 @@
    - +
    @@ -1311,7 +1345,7 @@
    - +
    @@ -1396,7 +1430,7 @@
    - +
    @@ -1480,7 +1514,7 @@
    - +
    @@ -1564,7 +1598,7 @@
    - +
    @@ -1628,7 +1662,7 @@ - src/pixi/text/Text.js:35 + src/pixi/text/Text.js:37

    @@ -1694,7 +1728,7 @@
  • - [stroke] + [stroke="black"] String optional @@ -1720,6 +1754,34 @@
  • +
  • + + [wordWrap=false] + Boolean + optional + + +
    +

    Indicates if word wrap should be used

    +
    + + +
  • + +
  • + + [wordWrapWidth=100] + Number + optional + + +
    +

    The width at which text will wrap

    +
    + + +
  • + @@ -1907,7 +1969,7 @@
    - +
    @@ -1922,7 +1984,7 @@
    - +
    @@ -2007,7 +2069,7 @@
    - +
    @@ -2091,7 +2153,7 @@
    - +
    @@ -2176,7 +2238,7 @@
    - +
    @@ -2260,7 +2322,7 @@
    - +
    diff --git a/docs/classes/Texture.html b/docs/classes/Texture.html index 6f63054..04a5a8f 100644 --- a/docs/classes/Texture.html +++ b/docs/classes/Texture.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/classes/TilingSprite.html b/docs/classes/TilingSprite.html index f2d66a5..83520de 100644 --- a/docs/classes/TilingSprite.html +++ b/docs/classes/TilingSprite.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -612,7 +618,7 @@
    - +
    @@ -702,7 +708,7 @@
    - +
    @@ -717,7 +723,7 @@
    - +
    @@ -801,7 +807,7 @@
    - +
    @@ -885,7 +891,7 @@
    - +
    @@ -969,7 +975,7 @@
    - +
    @@ -1053,7 +1059,7 @@
    - +
    @@ -1137,7 +1143,7 @@
    - +
    @@ -1222,7 +1228,7 @@
    - +
    @@ -1307,7 +1313,7 @@
    - +
    @@ -1391,7 +1397,7 @@
    - +
    @@ -1475,7 +1481,7 @@
    - +
    @@ -1565,7 +1571,7 @@
    - +
    @@ -1580,7 +1586,7 @@
    - +
    @@ -1665,7 +1671,7 @@
    - +
    @@ -1749,7 +1755,7 @@
    - +
    @@ -1834,7 +1840,7 @@
    - +
    @@ -1918,7 +1924,7 @@
    - +
    diff --git a/docs/classes/WebGLBatch.html b/docs/classes/WebGLBatch.html index 90f9c6b..7de62b9 100644 --- a/docs/classes/WebGLBatch.html +++ b/docs/classes/WebGLBatch.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -604,7 +610,7 @@ - src/pixi/renderers/WebGLBatch.js:267 + src/pixi/renderers/WebGLBatch.js:268

    @@ -681,7 +687,7 @@ - src/pixi/renderers/WebGLBatch.js:345 + src/pixi/renderers/WebGLBatch.js:346

    @@ -980,7 +986,7 @@ - src/pixi/renderers/WebGLBatch.js:400 + src/pixi/renderers/WebGLBatch.js:401

    diff --git a/docs/classes/WebGLRenderer.html b/docs/classes/WebGLRenderer.html index fcef6b6..5cb2a66 100644 --- a/docs/classes/WebGLRenderer.html +++ b/docs/classes/WebGLRenderer.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/data.json b/docs/data.json index 4b27831..b9ee342 100644 --- a/docs/data.json +++ b/docs/data.json @@ -23,6 +23,13 @@ "fors": {}, "namespaces": {} }, + "src/pixi/extras/Spine.js": { + "name": "src/pixi/extras/Spine.js", + "modules": {}, + "classes": {}, + "fors": {}, + "namespaces": {} + }, "src/pixi/extras/Strip.js": { "name": "src/pixi/extras/Strip.js", "modules": {}, @@ -66,6 +73,24 @@ "fors": {}, "namespaces": {} }, + "src/pixi/loaders/JsonLoader.js": { + "name": "src/pixi/loaders/JsonLoader.js", + "modules": {}, + "classes": { + "JsonLoader": 1 + }, + "fors": {}, + "namespaces": {} + }, + "src/pixi/loaders/SpineLoader.js": { + "name": "src/pixi/loaders/SpineLoader.js", + "modules": {}, + "classes": { + "Spine": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/loaders/SpriteSheetLoader.js": { "name": "src/pixi/loaders/SpriteSheetLoader.js", "modules": {}, @@ -251,6 +276,15 @@ "fors": {}, "namespaces": {} }, + "src/pixi/Polygon.js": { + "name": "src/pixi/Polygon.js", + "modules": {}, + "classes": { + "Polygon": 1 + }, + "fors": {}, + "namespaces": {} + }, "src/pixi/Rectangle.js": { "name": "src/pixi/Rectangle.js", "modules": {}, @@ -285,10 +319,12 @@ "submodules": {}, "classes": { "CustomRenderable": 1, + "Spine": 1, "TilingSprite": 1, "AssetLoader": 1, "BitmapFontLoader": 1, "ImageLoader": 1, + "JsonLoader": 1, "SpriteSheetLoader": 1, "CanvasRenderer": 1, "WebGLBatch": 1, @@ -304,6 +340,7 @@ "InteractionData": 1, "MovieClip": 1, "Point": 1, + "Polygon": 1, "Rectangle": 1, "Sprite": 1, "Stage": 1 @@ -331,6 +368,28 @@ "extends": "DisplayObject", "is_constructor": 1 }, + "Spine": { + "name": "Spine", + "shortname": "Spine", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/SpineLoader.js", + "line": 10, + "description": "The Spine loader is used to load in JSON spine data\nTo generate the data you need to use http://esotericsoftware.com/ and export the \"JSON\" format\nDue to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load\nSee example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source\nYou will need to generate a sprite sheet to accompany the spine data \nWhen loaded this class will dispatch a \"loaded\" event", + "is_constructor": 1, + "extends": "DisplayObjectContainer", + "params": [ + { + "name": "url", + "description": "the url of the spine anim file to be used", + "type": "String" + } + ] + }, "TilingSprite": { "name": "TilingSprite", "shortname": "TilingSprite", @@ -439,6 +498,33 @@ } ] }, + "JsonLoader": { + "name": "JsonLoader", + "shortname": "JsonLoader", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "file": "src/pixi/loaders/JsonLoader.js", + "line": 5, + "description": "The json file loader is used to load in JSON data and parsing it\nWhen loaded this class will dispatch a \"loaded\" event\nIf load failed this class will dispatch a \"error\" event", + "extends": "EventTarget", + "is_constructor": 1, + "params": [ + { + "name": "url", + "description": "the url of the JSON file", + "type": "String" + }, + { + "name": "crossorigin", + "description": "", + "type": "Boolean" + } + ] + }, "SpriteSheetLoader": { "name": "SpriteSheetLoader", "shortname": "SpriteSheetLoader", @@ -662,6 +748,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] } @@ -804,7 +904,7 @@ "extension_for": [], "module": "PIXI", "file": "src/pixi/InteractionManager.js", - "line": 506, + "line": 513, "is_constructor": 1 }, "MovieClip": { @@ -856,6 +956,27 @@ } ] }, + "Polygon": { + "name": "Polygon", + "shortname": "Polygon", + "classitems": [], + "plugins": [], + "extensions": [], + "plugin_for": [], + "extension_for": [], + "module": "PIXI", + "namespace": "", + "file": "src/pixi/Polygon.js", + "line": 5, + "is_constructor": 1, + "params": [ + { + "name": "points", + "description": "", + "type": "Array" + } + ] + }, "Rectangle": { "name": "Rectangle", "shortname": "Rectangle", @@ -956,7 +1077,135 @@ "file": "src/pixi/extras/Rope.js", "line": 1, "author": "Mat Groves http://matgroves.com/", - "class": "TilingSprite" + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 308, + "description": "cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 604, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 611, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 618, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 626, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 633, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 640, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 675, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 683, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 698, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 702, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 709, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 716, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 723, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 735, + "description": "from the new skin are attached if the corresponding attachment from the old skin was attached.", + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 742, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 746, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 755, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 948, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 954, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 960, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 966, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 984, + "class": "Spine" + }, + { + "file": "src/pixi/extras/Spine.js", + "line": 1401, + "class": "Spine" }, { "file": "src/pixi/extras/Strip.js", @@ -1005,7 +1254,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 38, + "line": 41, "description": "Fired when an item has loaded", "itemtype": "event", "name": "onProgress", @@ -1013,7 +1262,7 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 43, + "line": 46, "description": "Fired when all the assets have loaded", "itemtype": "event", "name": "onComplete", @@ -1021,13 +1270,13 @@ }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 51, + "line": 54, "description": "This will begin loading the assets sequentially", "class": "AssetLoader" }, { "file": "src/pixi/loaders/AssetLoader.js", - "line": 79, + "line": 82, "description": "Invoked after each file is loaded", "access": "private", "tagname": "", @@ -1055,7 +1304,7 @@ }, { "file": "src/pixi/loaders/BitmapFontLoader.js", - "line": 118, + "line": 121, "description": "Invoked when all files are loaded (xml/fnt and texture)", "access": "private", "tagname": "", @@ -1082,6 +1331,56 @@ "class": "ImageLoader" }, { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 28, + "description": "This will begin loading the JSON file", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 43, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 108, + "description": "Invoke when json file loaded", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/JsonLoader.js", + "line": 120, + "description": "Invoke when error occured", + "access": "private", + "tagname": "", + "class": "JsonLoader" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 1, + "author": "Mat Groves http://matgroves.com/ @Doormat23\nbased on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi\n\nAwesome JS run time provided by EsotericSoftware\nhttps://github.com/EsotericSoftware/spine-runtimes", + "class": "Spine" + }, + { + "file": "src/pixi/loaders/SpineLoader.js", + "line": 54, + "description": "Invoke when JSON file is loaded", + "access": "private", + "tagname": "", + "class": "Spine" + }, + { "file": "src/pixi/loaders/SpriteSheetLoader.js", "line": 1, "author": "Mat Groves http://matgroves.com/ @Doormat23", @@ -1089,13 +1388,13 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 38, + "line": 37, "description": "This will begin loading the JSON file", "class": "SpriteSheetLoader" }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 55, + "line": 50, "description": "Invoke when JSON file is loaded", "access": "private", "tagname": "", @@ -1103,7 +1402,7 @@ }, { "file": "src/pixi/loaders/SpriteSheetLoader.js", - "line": 97, + "line": 85, "description": "Invoke when all files are loaded (json and texture)", "access": "private", "tagname": "", @@ -1193,21 +1492,21 @@ }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 210, + "line": 213, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 245, + "line": 248, "access": "private", "tagname": "", "class": "CanvasRenderer" }, { "file": "src/pixi/renderers/CanvasRenderer.js", - "line": 274, + "line": 277, "access": "private", "tagname": "", "class": "CanvasRenderer" @@ -1336,7 +1635,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 267, + "line": 268, "description": "Merges two batchs together", "itemtype": "method", "name": "merge", @@ -1351,14 +1650,14 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 292, + "line": 293, "description": "Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", "methos": "growBatch", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 345, + "line": 346, "description": "Refresh's all the data in the batch and sync's it with the webGL buffers", "itemtype": "method", "name": "refresh", @@ -1366,7 +1665,7 @@ }, { "file": "src/pixi/renderers/WebGLBatch.js", - "line": 400, + "line": 401, "description": "Updates all the relevant geometry and uploads the data to the GPU", "itemtype": "method", "name": "update", @@ -1388,35 +1687,35 @@ }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 527, + "line": 626, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 613, + "line": 712, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 669, + "line": 768, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 746, + "line": 845, "access": "private", "tagname": "", "class": "WebGLBatch" }, { "file": "src/pixi/renderers/WebGLRenderGroup.js", - "line": 783, + "line": 882, "access": "private", "tagname": "", "class": "WebGLBatch" @@ -1583,7 +1882,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 35, + "line": 37, "description": "Set the style of the text", "itemtype": "method", "name": "setStyle", @@ -1612,7 +1911,8 @@ "name": "stroke", "description": "A canvas fillstyle that will be used on the text stroke eg \"blue\", \"#FCFF00\"", "type": "String", - "optional": true + "optional": true, + "optdefault": "\"black\"" }, { "name": "strokeThickness", @@ -1620,6 +1920,20 @@ "type": "Number", "optional": true, "optdefault": "0" + }, + { + "name": "wordWrap", + "description": "Indicates if word wrap should be used", + "type": "Boolean", + "optional": true, + "optdefault": "false" + }, + { + "name": "wordWrapWidth", + "description": "The width at which text will wrap", + "type": "Number", + "optional": true, + "optdefault": "100" } ] }, @@ -1633,7 +1947,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 56, + "line": 63, "description": "Set the copy for the text object. To split a line you can use \"\\n\"", "methos": "setText", "params": [ @@ -1647,7 +1961,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 67, + "line": 74, "description": "Renders text", "access": "private", "tagname": "", @@ -1655,7 +1969,7 @@ }, { "file": "src/pixi/text/Text.js", - "line": 130, + "line": 143, "description": "Updates texture size based on canvas size", "access": "private", "tagname": "", @@ -1663,7 +1977,15 @@ }, { "file": "src/pixi/text/Text.js", - "line": 148, + "line": 161, + "access": "private", + "tagname": "", + "class": "Text" + }, + { + "file": "src/pixi/text/Text.js", + "line": 203, + "description": "A Text Object will apply wordwrap", "access": "private", "tagname": "", "class": "Text" @@ -1703,7 +2025,7 @@ }, { "file": "src/pixi/textures/BaseTexture.js", - "line": 103, + "line": 101, "description": "Helper function that returns a base texture based on an image url\n If the image is not in the base texture cache it will be created and loaded", "static": 1, "itemtype": "method", @@ -1740,7 +2062,7 @@ }, { "name": "clear", - "description": "If true the texture will not be cleared before the displayObject is drawn", + "description": "If true the texture will be cleared before the displayObject is drawn", "type": "Boolean" } ], @@ -1928,13 +2250,7 @@ }, { "file": "src/pixi/utils/Utils.js", - "line": 1, - "description": "Provides requestAnimationFrame in a cross browser way.", - "class": "DisplayObject" - }, - { - "file": "src/pixi/utils/Utils.js", - "line": 19, + "line": 38, "description": "Provides bind in a cross browser way.", "class": "DisplayObject" }, @@ -2348,7 +2664,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 512, + "line": 519, "description": "This point stores the global coords of where the touch/mouse event happened", "itemtype": "property", "name": "global", @@ -2357,7 +2673,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 522, + "line": 529, "description": "The target Sprite that was interacted with", "itemtype": "property", "name": "target", @@ -2366,7 +2682,7 @@ }, { "file": "src/pixi/InteractionManager.js", - "line": 530, + "line": 537, "description": "This will return the local coords of the specified displayObject for this InteractionData", "itemtype": "method", "name": "getLocalPosition", @@ -2546,6 +2862,24 @@ "module": "PIXI" }, { + "file": "src/pixi/Polygon.js", + "line": 1, + "author": "Adrien Brault ", + "class": "Polygon", + "module": "PIXI" + }, + { + "file": "src/pixi/Polygon.js", + "line": 15, + "itemtype": "method", + "name": "clone", + "return": { + "description": "a copy of the polygon" + }, + "class": "Polygon", + "module": "PIXI" + }, + { "file": "src/pixi/Rectangle.js", "line": 1, "author": "Mat Groves http://matgroves.com/", @@ -2733,7 +3067,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 38, + "line": 40, "itemtype": "method", "name": "updateTransform", "internal": "", @@ -2742,7 +3076,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 61, + "line": 63, "itemtype": "method", "name": "setBackgroundColor", "params": [ @@ -2757,7 +3091,7 @@ }, { "file": "src/pixi/Stage.js", - "line": 72, + "line": 76, "description": "This will return the point containing global coords of the mouse.", "itemtype": "method", "name": "getMousePosition", @@ -2772,15 +3106,15 @@ "warnings": [ { "message": "unknown tag: methos", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "unknown tag: methos", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "unknown tag: internal", - "line": " src/pixi/Stage.js:38" + "line": " src/pixi/Stage.js:40" }, { "message": "Missing item type", @@ -2792,6 +3126,106 @@ }, { "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1" + }, + { + "message": "Missing item type\ncx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of", + "line": " src/pixi/extras/Spine.js:308" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:604" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:611" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:618" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:626" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:633" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:640" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:675" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:683" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:698" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:702" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:709" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:716" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:723" + }, + { + "message": "Missing item type\nfrom the new skin are attached if the corresponding attachment from the old skin was attached.", + "line": " src/pixi/extras/Spine.js:735" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:742" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:746" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:755" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:948" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:954" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:960" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:966" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:984" + }, + { + "message": "Missing item type", + "line": " src/pixi/extras/Spine.js:1401" + }, + { + "message": "Missing item type", "line": " src/pixi/extras/Strip.js:1" }, { @@ -2804,11 +3238,11 @@ }, { "message": "Missing item type\nThis will begin loading the assets sequentially", - "line": " src/pixi/loaders/AssetLoader.js:51" + "line": " src/pixi/loaders/AssetLoader.js:54" }, { "message": "Missing item type\nInvoked after each file is loaded", - "line": " src/pixi/loaders/AssetLoader.js:79" + "line": " src/pixi/loaders/AssetLoader.js:82" }, { "message": "Missing item type", @@ -2824,7 +3258,7 @@ }, { "message": "Missing item type\nInvoked when all files are loaded (xml/fnt and texture)", - "line": " src/pixi/loaders/BitmapFontLoader.js:118" + "line": " src/pixi/loaders/BitmapFontLoader.js:121" }, { "message": "Missing item type", @@ -2840,19 +3274,47 @@ }, { "message": "Missing item type", + "line": " src/pixi/loaders/JsonLoader.js:1" + }, + { + "message": "Missing item type\nThis will begin loading the JSON file", + "line": " src/pixi/loaders/JsonLoader.js:28" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/JsonLoader.js:43" + }, + { + "message": "Missing item type\nInvoke when json file loaded", + "line": " src/pixi/loaders/JsonLoader.js:108" + }, + { + "message": "Missing item type\nInvoke when error occured", + "line": " src/pixi/loaders/JsonLoader.js:120" + }, + { + "message": "Missing item type", + "line": " src/pixi/loaders/SpineLoader.js:1" + }, + { + "message": "Missing item type\nInvoke when JSON file is loaded", + "line": " src/pixi/loaders/SpineLoader.js:54" + }, + { + "message": "Missing item type", "line": " src/pixi/loaders/SpriteSheetLoader.js:1" }, { "message": "Missing item type\nThis will begin loading the JSON file", - "line": " src/pixi/loaders/SpriteSheetLoader.js:38" + "line": " src/pixi/loaders/SpriteSheetLoader.js:37" }, { "message": "Missing item type\nInvoke when JSON file is loaded", - "line": " src/pixi/loaders/SpriteSheetLoader.js:55" + "line": " src/pixi/loaders/SpriteSheetLoader.js:50" }, { "message": "Missing item type\nInvoke when all files are loaded (json and texture)", - "line": " src/pixi/loaders/SpriteSheetLoader.js:97" + "line": " src/pixi/loaders/SpriteSheetLoader.js:85" }, { "message": "Missing item type", @@ -2868,15 +3330,15 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:210" + "line": " src/pixi/renderers/CanvasRenderer.js:213" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:245" + "line": " src/pixi/renderers/CanvasRenderer.js:248" }, { "message": "Missing item type", - "line": " src/pixi/renderers/CanvasRenderer.js:274" + "line": " src/pixi/renderers/CanvasRenderer.js:277" }, { "message": "Missing item type", @@ -2900,7 +3362,7 @@ }, { "message": "Missing item type\nGrows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added", - "line": " src/pixi/renderers/WebGLBatch.js:292" + "line": " src/pixi/renderers/WebGLBatch.js:293" }, { "message": "Missing item type", @@ -2908,23 +3370,23 @@ }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:527" + "line": " src/pixi/renderers/WebGLRenderGroup.js:626" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:613" + "line": " src/pixi/renderers/WebGLRenderGroup.js:712" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:669" + "line": " src/pixi/renderers/WebGLRenderGroup.js:768" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:746" + "line": " src/pixi/renderers/WebGLRenderGroup.js:845" }, { "message": "Missing item type", - "line": " src/pixi/renderers/WebGLRenderGroup.js:783" + "line": " src/pixi/renderers/WebGLRenderGroup.js:882" }, { "message": "Missing item type", @@ -2976,19 +3438,23 @@ }, { "message": "Missing item type\nSet the copy for the text object. To split a line you can use \"\\n\"", - "line": " src/pixi/text/Text.js:56" + "line": " src/pixi/text/Text.js:63" }, { "message": "Missing item type\nRenders text", - "line": " src/pixi/text/Text.js:67" + "line": " src/pixi/text/Text.js:74" }, { "message": "Missing item type\nUpdates texture size based on canvas size", - "line": " src/pixi/text/Text.js:130" + "line": " src/pixi/text/Text.js:143" }, { "message": "Missing item type", - "line": " src/pixi/text/Text.js:148" + "line": " src/pixi/text/Text.js:161" + }, + { + "message": "Missing item type\nA Text Object will apply wordwrap", + "line": " src/pixi/text/Text.js:203" }, { "message": "Missing item type", @@ -3011,12 +3477,8 @@ "line": " src/pixi/utils/EventTarget.js:1" }, { - "message": "Missing item type\nProvides requestAnimationFrame in a cross browser way.", - "line": " src/pixi/utils/Utils.js:1" - }, - { "message": "Missing item type\nProvides bind in a cross browser way.", - "line": " src/pixi/utils/Utils.js:19" + "line": " src/pixi/utils/Utils.js:38" }, { "message": "Missing item type", @@ -3060,6 +3522,10 @@ }, { "message": "Missing item type", + "line": " src/pixi/Polygon.js:1" + }, + { + "message": "Missing item type", "line": " src/pixi/Rectangle.js:1" }, { diff --git a/docs/files/src_pixi_DisplayObject.js.html b/docs/files/src_pixi_DisplayObject.js.html index fefbccb..b24abfe 100644 --- a/docs/files/src_pixi_DisplayObject.js.html +++ b/docs/files/src_pixi_DisplayObject.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_DisplayObjectContainer.js.html b/docs/files/src_pixi_DisplayObjectContainer.js.html index 71eec5c..f77ccd8 100644 --- a/docs/files/src_pixi_DisplayObjectContainer.js.html +++ b/docs/files/src_pixi_DisplayObjectContainer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_InteractionManager.js.html b/docs/files/src_pixi_InteractionManager.js.html index 3a7c0b9..2cd4555 100644 --- a/docs/files/src_pixi_InteractionManager.js.html +++ b/docs/files/src_pixi_InteractionManager.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -197,25 +203,27 @@ { var child = children[i]; - // push all interactive bits - if(child.interactive) - { - iParent.interactiveChildren = true; - //child.__iParent = iParent; - this.interactiveItems.push(child); - - if(child.children.length > 0) + if(child.visible) { + // push all interactive bits + if(child.interactive) { - this.collectInteractiveSprite(child, child); + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } } - } - else - { - child.__iParent = null; - - if(child.children.length > 0) + else { - this.collectInteractiveSprite(child, iParent); + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } } } } @@ -325,8 +333,6 @@ PIXI.InteractionManager.prototype.onMouseMove = function(event) { - event.preventDefault(); - // TODO optimize by not check EVERY TIME! maybe half as often? // var rect = this.target.view.getBoundingClientRect(); @@ -351,8 +357,6 @@ PIXI.InteractionManager.prototype.onMouseDown = function(event) { - event.preventDefault(); - // loop through inteaction tree... // hit test each item! -> // get interactive items under point?? @@ -389,7 +393,6 @@ PIXI.InteractionManager.prototype.onMouseUp = function(event) { - event.preventDefault(); var global = this.mouse.global; @@ -436,27 +439,66 @@ var global = interactionData.global; if(!item.visible)return false; - - if(item instanceof PIXI.Sprite) + + var isSprite = (item instanceof PIXI.Sprite), + worldTransform = item.worldTransform, + a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10), + x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + //a sprite or display object with a hit area defined + if(item.hitArea) { - var worldTransform = item.worldTransform; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var width = item.texture.frame.width; - var height = item.texture.frame.height; - - var x1 = -width * item.anchor.x; + var hitArea = item.hitArea; + + //Polygon hit area + if(item.hitArea instanceof PIXI.Polygon) { + var inside = false; + + // use some raycasting to test hits + // https://github.com/substack/point-in-polygon/blob/master/index.js + for(var i = 0, j = item.hitArea.points.length - 1; i < item.hitArea.points.length; j = i++) { + var xi = item.hitArea.points[i].x, yi = item.hitArea.points[i].y, + xj = item.hitArea.points[j].x, yj = item.hitArea.points[j].y, + intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); + + if(intersect) inside = !inside; + } + + if(inside) { + if(isSprite) interactionData.target = item; + return true; + } + } + //Rectangle hit area + else { + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + if(isSprite) interactionData.target = item; + return true; + } + } + } + } + // a sprite with no hitarea defined + else if(isSprite) + { + var width = item.texture.frame.width, + height = item.texture.frame.height, + x1 = -width * item.anchor.x, + y1; if(x > x1 && x < x1 + width) { - var y1 = -height * item.anchor.y; - + y1 = -height * item.anchor.y; + if(y > y1 && y < y1 + height) { // set the target property if a hit is true! @@ -465,30 +507,7 @@ } } } - else if(item.hitArea) - { - var worldTransform = item.worldTransform; - var hitArea = item.hitArea; - - var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], - a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], - id = 1 / (a00 * a11 + a01 * -a10); - - var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; - var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; - - var x1 = hitArea.x; - if(x > x1 && x < x1 + hitArea.width) - { - var y1 = hitArea.y; - - if(y > y1 && y < y1 + hitArea.height) - { - return true; - } - } - } - + var length = item.children.length; for (var i = 0; i < length; i++) @@ -497,7 +516,7 @@ var hit = this.hitTest(tempItem, interactionData); if(hit)return true; } - + return false; } @@ -505,8 +524,6 @@ PIXI.InteractionManager.prototype.onTouchMove = function(event) { - event.preventDefault(); - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -530,7 +547,6 @@ PIXI.InteractionManager.prototype.onTouchStart = function(event) { - event.preventDefault(); var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; @@ -572,9 +588,6 @@ PIXI.InteractionManager.prototype.onTouchEnd = function(event) { - event.preventDefault(); - - var rect = this.target.view.getBoundingClientRect(); var changedTouches = event.changedTouches; diff --git a/docs/files/src_pixi_Intro.js.html b/docs/files/src_pixi_Intro.js.html index 0d5d7e0..f1aeb3e 100644 --- a/docs/files/src_pixi_Intro.js.html +++ b/docs/files/src_pixi_Intro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_MovieClip.js.html b/docs/files/src_pixi_MovieClip.js.html index 518791a..789564a 100644 --- a/docs/files/src_pixi_MovieClip.js.html +++ b/docs/files/src_pixi_MovieClip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Outro.js.html b/docs/files/src_pixi_Outro.js.html index f4d0d10..3c1fd76 100644 --- a/docs/files/src_pixi_Outro.js.html +++ b/docs/files/src_pixi_Outro.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Pixi.js.html b/docs/files/src_pixi_Pixi.js.html index d26d0be..dab9bbf 100644 --- a/docs/files/src_pixi_Pixi.js.html +++ b/docs/files/src_pixi_Pixi.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Point.js.html b/docs/files/src_pixi_Point.js.html index 8586c05..d6e80ef 100644 --- a/docs/files/src_pixi_Point.js.html +++ b/docs/files/src_pixi_Point.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Polygon.js.html b/docs/files/src_pixi_Polygon.js.html new file mode 100644 index 0000000..c163c07 --- /dev/null +++ b/docs/files/src_pixi_Polygon.js.html @@ -0,0 +1,190 @@ + + + + + src/pixi/Polygon.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/Polygon.js

    + +
    +
    +/**
    + * @author Adrien Brault <adrien.brault@gmail.com>
    + */
    +
    +/**
    + * @class Polygon
    + * @constructor
    + * @param points {Array}
    + */
    +PIXI.Polygon = function(points)
    +{
    +	this.points = points;
    +}
    +
    +/**
    + * @method clone
    + * @return a copy of the polygon
    + */
    +PIXI.Polygon.clone = function()
    +{
    +	var points = [];
    +	for (var i=0; i<this.points.length; i++) {
    +		points.push(this.points[i].clone());
    +	}
    +
    +	return new PIXI.Polygon(points);
    +}
    +
    +PIXI.Polygon.constructor = PIXI.Polygon;
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_Rectangle.js.html b/docs/files/src_pixi_Rectangle.js.html index 87f58d4..48a4adc 100644 --- a/docs/files/src_pixi_Rectangle.js.html +++ b/docs/files/src_pixi_Rectangle.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Sprite.js.html b/docs/files/src_pixi_Sprite.js.html index cb1e71e..da5682d 100644 --- a/docs/files/src_pixi_Sprite.js.html +++ b/docs/files/src_pixi_Sprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_Stage.js.html b/docs/files/src_pixi_Stage.js.html index f5dcbfd..7ccceb0 100644 --- a/docs/files/src_pixi_Stage.js.html +++ b/docs/files/src_pixi_Stage.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -162,6 +168,8 @@ this.setBackgroundColor(backgroundColor); this.worldVisible = true; + + this.stage.dirty = true; } // constructor @@ -200,7 +208,9 @@ { this.backgroundColor = backgroundColor || 0x000000; this.backgroundColorSplit = HEXtoRGB(this.backgroundColor); - this.backgroundColorString = "#" + this.backgroundColor.toString(16); + var hex = this.backgroundColor.toString(16); + hex = "000000".substr(0, 6 - hex.length) + hex; + this.backgroundColorString = "#" + hex; } /** diff --git a/docs/files/src_pixi_extras_CustomRenderable.js.html b/docs/files/src_pixi_extras_CustomRenderable.js.html index 4905107..df4888b 100644 --- a/docs/files/src_pixi_extras_CustomRenderable.js.html +++ b/docs/files/src_pixi_extras_CustomRenderable.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Rope.js.html b/docs/files/src_pixi_extras_Rope.js.html index 6fac2f8..4164444 100644 --- a/docs/files/src_pixi_extras_Rope.js.html +++ b/docs/files/src_pixi_extras_Rope.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_Spine.js.html b/docs/files/src_pixi_extras_Spine.js.html new file mode 100644 index 0000000..82f2a74 --- /dev/null +++ b/docs/files/src_pixi_extras_Spine.js.html @@ -0,0 +1,1606 @@ + + + + + src/pixi/extras/Spine.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/extras/Spine.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * A class that enables the you to import and run your spine animations in pixi.
    + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class
    + * Also due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * @class Spine
    + * @constructor
    + * @extends DisplayObjectContainer
    + * @param {String} url the url of the spine anim file to be used
    + */
    +PIXI.Spine = function(url)
    +{
    +	PIXI.DisplayObjectContainer.call(this);
    +	
    +	this.spineData = PIXI.AnimCache[url];
    +	
    +	if(!this.spineData)
    +	{
    +		throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url);
    +		return;
    +	}
    +	
    +	this.count = 0;
    +	
    +	this.sprites = [];
    +	
    +	this.skeleton = new spine.Skeleton(this.spineData);
    +	this.skeleton.updateWorldTransform();
    +
    +	this.stateData = new spine.AnimationStateData(this.spineData);	
    +	this.state = new spine.AnimationState(this.stateData);
    +	
    +	// add the sprites..
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) {
    +		
    +		var attachmentName = this.skeleton.drawOrder[i].data.attachmentName;
    +		
    +		// kind of an assumtion here. that its a png
    +		if(!PIXI.TextureCache[attachmentName])
    +		{
    +			attachmentName += ".png";
    +		}
    +		
    +		
    +		var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName));
    +		sprite.anchor.x = sprite.anchor.y = 0.5;
    +		this.addChild(sprite);
    +		this.sprites.push(sprite);
    +	};
    +}
    +
    +PIXI.Spine.constructor = PIXI.Spine;
    +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype );
    +PIXI.Spine.prototype.updateTransform = function()
    +{
    +	// TODO should make this time based really..
    +	this.state.update(1/60);
    +	this.state.apply(this.skeleton);
    +	this.skeleton.updateWorldTransform();
    +
    +	
    +	for (var i = 0; i < this.skeleton.drawOrder.length; i++) 
    +	{
    +		var slot = this.skeleton.drawOrder[i];
    +
    +		var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5;
    +		var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5;
    +		//console.log(x + ' : ' + y);
    +		
    +		 
    +			//console.log(slot.attachment.name)
    +			if(slot.cacheName != slot.attachment.name)
    +			{
    +				var attachmentName = slot.attachment.name;
    +		
    +				if(!PIXI.TextureCache[attachmentName])
    +				{
    +					attachmentName += ".png";
    +				}
    +				
    +				this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]);
    +				
    +				slot.cacheName = slot.attachment.name;
    +			}
    +		
    +		x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1);
    +		y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1);
    +		
    +		
    +		this.sprites[i].position.x = x;
    +		this.sprites[i].position.y = y;
    +		this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180);
    +	}	
    +	
    +	PIXI.DisplayObjectContainer.prototype.updateTransform.call(this);
    +}
    +
    +/*
    + * Awesome JS run time provided by EsotericSoftware
    + * 
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +var spine = {};
    +
    +spine.BoneData = function (name, parent) {
    +	this.name = name;
    +	this.parent = parent;
    +};
    +spine.BoneData.prototype = {
    +	length: 0,
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1
    +};
    +
    +spine.SlotData = function (name, boneData) {
    +	this.name = name;
    +	this.boneData = boneData;
    +};
    +spine.SlotData.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	attachmentName: null
    +};
    +
    +spine.Bone = function (boneData, parent) {
    +	this.data = boneData;
    +	this.parent = parent;
    +	this.setToSetupPose();
    +};
    +spine.Bone.yDown = false;
    +spine.Bone.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	m00: 0, m01: 0, worldX: 0, // a b x
    +	m10: 0, m11: 0, worldY: 0, // c d y
    +	worldRotation: 0,
    +	worldScaleX: 1, worldScaleY: 1,
    +	updateWorldTransform: function (flipX, flipY) {
    +		var parent = this.parent;
    +		if (parent != null) {
    +			this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX;
    +			this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY;
    +			this.worldScaleX = parent.worldScaleX * this.scaleX;
    +			this.worldScaleY = parent.worldScaleY * this.scaleY;
    +			this.worldRotation = parent.worldRotation + this.rotation;
    +		} else {
    +			this.worldX = this.x;
    +			this.worldY = this.y;
    +			this.worldScaleX = this.scaleX;
    +			this.worldScaleY = this.scaleY;
    +			this.worldRotation = this.rotation;
    +		}
    +		var radians = this.worldRotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		this.m00 = cos * this.worldScaleX;
    +		this.m10 = sin * this.worldScaleX;
    +		this.m01 = -sin * this.worldScaleY;
    +		this.m11 = cos * this.worldScaleY;
    +		if (flipX) {
    +			this.m00 = -this.m00;
    +			this.m01 = -this.m01;
    +		}
    +		if (flipY) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +		if (spine.Bone.yDown) {
    +			this.m10 = -this.m10;
    +			this.m11 = -this.m11;
    +		}
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.x = data.x;
    +		this.y = data.y;
    +		this.rotation = data.rotation;
    +		this.scaleX = data.scaleX;
    +		this.scaleY = data.scaleY;
    +	}
    +};
    +
    +spine.Slot = function (slotData, skeleton, bone) {
    +	this.data = slotData;
    +	this.skeleton = skeleton;
    +	this.bone = bone;
    +	this.setToSetupPose();
    +};
    +spine.Slot.prototype = {
    +	r: 1, g: 1, b: 1, a: 1,
    +	_attachmentTime: 0,
    +	attachment: null,
    +	setAttachment: function (attachment) {
    +		this.attachment = attachment;
    +		this._attachmentTime = this.skeleton.time;
    +	},
    +	setAttachmentTime: function (time) {
    +		this._attachmentTime = this.skeleton.time - time;
    +	},
    +	getAttachmentTime: function () {
    +		return this.skeleton.time - this._attachmentTime;
    +	},
    +	setToSetupPose: function () {
    +		var data = this.data;
    +		this.r = data.r;
    +		this.g = data.g;
    +		this.b = data.b;
    +		this.a = data.a;
    +		
    +		var slotDatas = this.skeleton.data.slots;
    +		for (var i = 0, n = slotDatas.length; i < n; i++) {
    +			if (slotDatas[i] == data) {
    +				this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName));
    +				break;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Skin = function (name) {
    +	this.name = name;
    +	this.attachments = {};
    +};
    +spine.Skin.prototype = {
    +	addAttachment: function (slotIndex, name, attachment) {
    +		this.attachments[slotIndex + ":" + name] = attachment;
    +	},
    +	getAttachment: function (slotIndex, name) {
    +		return this.attachments[slotIndex + ":" + name];
    +	},
    +	_attachAll: function (skeleton, oldSkin) {
    +		for (var key in oldSkin.attachments) {
    +			var colon = key.indexOf(":");
    +			var slotIndex = parseInt(key.substring(0, colon));
    +			var name = key.substring(colon + 1);
    +			var slot = skeleton.slots[slotIndex];
    +			if (slot.attachment && slot.attachment.name == name) {
    +				var attachment = this.getAttachment(slotIndex, name);
    +				if (attachment) slot.setAttachment(attachment);
    +			}
    +		}
    +	}
    +};
    +
    +spine.Animation = function (name, timelines, duration) {
    +	this.name = name;
    +	this.timelines = timelines;
    +	this.duration = duration;
    +};
    +spine.Animation.prototype = {
    +	apply: function (skeleton, time, loop) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, 1);
    +	},
    +	mix: function (skeleton, time, loop, alpha) {
    +		if (loop && this.duration != 0) time %= this.duration;
    +		var timelines = this.timelines;
    +		for (var i = 0, n = timelines.length; i < n; i++)
    +			timelines[i].apply(skeleton, time, alpha);
    +	}
    +};
    +
    +spine.binarySearch = function (values, target, step) {
    +	var low = 0;
    +	var high = Math.floor(values.length / step) - 2;
    +	if (high == 0) return step;
    +	var current = high >>> 1;
    +	while (true) {
    +		if (values[(current + 1) * step] <= target)
    +			low = current + 1;
    +		else
    +			high = current;
    +		if (low == high) return (low + 1) * step;
    +		current = (low + high) >>> 1;
    +	}
    +};
    +spine.linearSearch = function (values, target, step) {
    +	for (var i = 0, last = values.length - step; i <= last; i += step)
    +		if (values[i] > target) return i;
    +	return -1;
    +};
    +
    +spine.Curves = function (frameCount) {
    +	this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ...
    +	this.curves.length = (frameCount - 1) * 6;
    +};
    +spine.Curves.prototype = {
    +	setLinear: function (frameIndex) {
    +		this.curves[frameIndex * 6] = 0/*LINEAR*/;
    +	},
    +	setStepped: function (frameIndex) {
    +		this.curves[frameIndex * 6] = -1/*STEPPED*/;
    +	},
    +	/** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next.
    +	 * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of
    +	 * the difference between the keyframe's values. */
    +	setCurve: function (frameIndex, cx1, cy1, cx2, cy2) {
    +		var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/;
    +		var subdiv_step2 = subdiv_step * subdiv_step;
    +		var subdiv_step3 = subdiv_step2 * subdiv_step;
    +		var pre1 = 3 * subdiv_step;
    +		var pre2 = 3 * subdiv_step2;
    +		var pre4 = 6 * subdiv_step2;
    +		var pre5 = 6 * subdiv_step3;
    +		var tmp1x = -cx1 * 2 + cx2;
    +		var tmp1y = -cy1 * 2 + cy2;
    +		var tmp2x = (cx1 - cx2) * 3 + 1;
    +		var tmp2y = (cy1 - cy2) * 3 + 1;
    +		var i = frameIndex * 6;
    +		var curves = this.curves;
    +		curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3;
    +		curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3;
    +		curves[i + 2] = tmp1x * pre4 + tmp2x * pre5;
    +		curves[i + 3] = tmp1y * pre4 + tmp2y * pre5;
    +		curves[i + 4] = tmp2x * pre5;
    +		curves[i + 5] = tmp2y * pre5;
    +	},
    +	getCurvePercent: function (frameIndex, percent) {
    +		percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent);
    +		var curveIndex = frameIndex * 6;
    +		var curves = this.curves;
    +		var dfx = curves[curveIndex];
    +		if (!dfx/*LINEAR*/) return percent;
    +		if (dfx == -1/*STEPPED*/) return 0;
    +		var dfy = curves[curveIndex + 1];
    +		var ddfx = curves[curveIndex + 2];
    +		var ddfy = curves[curveIndex + 3];
    +		var dddfx = curves[curveIndex + 4];
    +		var dddfy = curves[curveIndex + 5];
    +		var x = dfx, y = dfy;
    +		var i = 10/*BEZIER_SEGMENTS*/ - 2;
    +		while (true) {
    +			if (x >= percent) {
    +				var lastX = x - dfx;
    +				var lastY = y - dfy;
    +				return lastY + (y - lastY) * (percent - lastX) / (x - lastX);
    +			}
    +			if (i == 0) break;
    +			i--;
    +			dfx += ddfx;
    +			dfy += ddfy;
    +			ddfx += dddfx;
    +			ddfy += dddfy;
    +			x += dfx;
    +			y += dfy;
    +		}
    +		return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1.
    +	}
    +};
    +
    +spine.RotateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, angle, ...
    +	this.frames.length = frameCount * 2;
    +};
    +spine.RotateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, angle) {
    +		frameIndex *= 2;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = angle;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 2]) { // Time is after last frame.
    +			var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation;
    +			while (amount > 180)
    +				amount -= 360;
    +			while (amount < -180)
    +				amount += 360;
    +			bone.rotation += amount * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 2);
    +		var lastFrameValue = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent);
    +
    +		var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation;
    +		while (amount > 180)
    +			amount -= 360;
    +		while (amount < -180)
    +			amount += 360;
    +		bone.rotation += amount * alpha;
    +	}
    +};
    +
    +spine.TranslateTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.TranslateTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha;
    +			bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha;
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +		bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha;
    +		bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha;
    +	}
    +};
    +
    +spine.ScaleTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, x, y, ...
    +	this.frames.length = frameCount * 3;
    +};
    +spine.ScaleTimeline.prototype = {
    +	boneIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 3;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 3;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = x;
    +		this.frames[frameIndex + 2] = y;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		
    +		var bone = skeleton.bones[this.boneIndex];
    +
    +		if (time >= frames[frames.length - 3]) { // Time is after last frame.
    +			bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha;
    +			bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha;
    +			
    +			
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 3);
    +		var lastFrameX = frames[frameIndex - 2];
    +		var lastFrameY = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent);
    +
    +		bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha;
    +		bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha;
    +	}
    +};
    +
    +spine.ColorTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, r, g, b, a, ...
    +	this.frames.length = frameCount * 5;
    +};
    +spine.ColorTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, x, y) {
    +		frameIndex *= 5;
    +		this.frames[frameIndex] = time;
    +		this.frames[frameIndex + 1] = r;
    +		this.frames[frameIndex + 2] = g;
    +		this.frames[frameIndex + 3] = b;
    +		this.frames[frameIndex + 4] = a;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +		var slot = skeleton.slots[this.slotIndex];
    +
    +		if (time >= frames[frames.length - 5]) { // Time is after last frame.
    +			var i = frames.length - 1;
    +			slot.r = frames[i - 3];
    +			slot.g = frames[i - 2];
    +			slot.b = frames[i - 1];
    +			slot.a = frames[i];
    +			return;
    +		}
    +
    +		// Interpolate between the last frame and the current frame.
    +		var frameIndex = spine.binarySearch(frames, time, 5);
    +		var lastFrameR = frames[frameIndex - 4];
    +		var lastFrameG = frames[frameIndex - 3];
    +		var lastFrameB = frames[frameIndex - 2];
    +		var lastFrameA = frames[frameIndex - 1];
    +		var frameTime = frames[frameIndex];
    +		var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime);
    +		percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent);
    +
    +		var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent;
    +		var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent;
    +		var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent;
    +		var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent;
    +		if (alpha < 1) {
    +			slot.r += (r - slot.r) * alpha;
    +			slot.g += (g - slot.g) * alpha;
    +			slot.b += (b - slot.b) * alpha;
    +			slot.a += (a - slot.a) * alpha;
    +		} else {
    +			slot.r = r;
    +			slot.g = g;
    +			slot.b = b;
    +			slot.a = a;
    +		}
    +	}
    +};
    +
    +spine.AttachmentTimeline = function (frameCount) {
    +	this.curves = new spine.Curves(frameCount);
    +	this.frames = []; // time, ...
    +	this.frames.length = frameCount;
    +	this.attachmentNames = []; // time, ...
    +	this.attachmentNames.length = frameCount;
    +};
    +spine.AttachmentTimeline.prototype = {
    +	slotIndex: 0,
    +	getFrameCount: function () {
    +		return this.frames.length / 2;
    +	},
    +	setFrame: function (frameIndex, time, attachmentName) {
    +		this.frames[frameIndex] = time;
    +		this.attachmentNames[frameIndex] = attachmentName;
    +	},
    +	apply: function (skeleton, time, alpha) {
    +		var frames = this.frames;
    +		if (time < frames[0]) return; // Time is before first frame.
    +
    +		var frameIndex;
    +		if (time >= frames[frames.length - 1]) // Time is after last frame.
    +			frameIndex = frames.length - 1;
    +		else
    +			frameIndex = spine.binarySearch(frames, time, 1) - 1;
    +
    +		var attachmentName = this.attachmentNames[frameIndex];
    +		//console.log(skeleton.slots[this.slotIndex])
    +		
    +		// change the name!
    +	//	skeleton.slots[this.slotIndex].attachmentName = attachmentName;
    +		
    +		skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName));
    +	}
    +};
    +
    +spine.SkeletonData = function () {
    +	this.bones = [];
    +	this.slots = [];
    +	this.skins = [];
    +	this.animations = [];
    +};
    +spine.SkeletonData.prototype = {
    +	defaultSkin: null,
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			if (slots[i].name == slotName) return slot[i];
    +		}
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].name == slotName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSkin: function (skinName) {
    +		var skins = this.skins;
    +		for (var i = 0, n = skins.length; i < n; i++)
    +			if (skins[i].name == skinName) return skins[i];
    +		return null;
    +	},
    +	/** @return May be null. */
    +	findAnimation: function (animationName) {
    +		var animations = this.animations;
    +		for (var i = 0, n = animations.length; i < n; i++)
    +			if (animations[i].name == animationName) return animations[i];
    +		return null;
    +	}
    +};
    +
    +spine.Skeleton = function (skeletonData) {
    +	this.data = skeletonData;
    +
    +	this.bones = [];
    +	for (var i = 0, n = skeletonData.bones.length; i < n; i++) {
    +		var boneData = skeletonData.bones[i];
    +		var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)];
    +		this.bones.push(new spine.Bone(boneData, parent));
    +	}
    +
    +	this.slots = [];
    +	this.drawOrder = [];
    +	for (var i = 0, n = skeletonData.slots.length; i < n; i++) {
    +		var slotData = skeletonData.slots[i];
    +		var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)];
    +		var slot = new spine.Slot(slotData, this, bone);
    +		this.slots.push(slot);
    +		this.drawOrder.push(slot);
    +	}
    +};
    +spine.Skeleton.prototype = {
    +	x: 0, y: 0,
    +	skin: null,
    +	r: 1, g: 1, b: 1, a: 1,
    +	time: 0,
    +	flipX: false, flipY: false,
    +	/** Updates the world transform for each bone. */
    +	updateWorldTransform: function () {
    +		var flipX = this.flipX;
    +		var flipY = this.flipY;
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].updateWorldTransform(flipX, flipY);
    +	},
    +	/** Sets the bones and slots to their setup pose values. */
    +	setToSetupPose: function () {
    +		this.setBonesToSetupPose();
    +		this.setSlotsToSetupPose();
    +	},
    +	setBonesToSetupPose: function () {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			bones[i].setToSetupPose();
    +	},
    +	setSlotsToSetupPose: function () {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			slots[i].setToSetupPose(i);
    +	},
    +	/** @return May return null. */
    +	getRootBone: function () {
    +		return this.bones.length == 0 ? null : this.bones[0];
    +	},
    +	/** @return May be null. */
    +	findBone: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return bones[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findBoneIndex: function (boneName) {
    +		var bones = this.bones;
    +		for (var i = 0, n = bones.length; i < n; i++)
    +			if (bones[i].data.name == boneName) return i;
    +		return -1;
    +	},
    +	/** @return May be null. */
    +	findSlot: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return slots[i];
    +		return null;
    +	},
    +	/** @return -1 if the bone was not found. */
    +	findSlotIndex: function (slotName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.length; i < n; i++)
    +			if (slots[i].data.name == slotName) return i;
    +		return -1;
    +	},
    +	setSkinByName: function (skinName) {
    +		var skin = this.data.findSkin(skinName);
    +		if (!skin) throw "Skin not found: " + skinName;
    +		this.setSkin(skin);
    +	},
    +	/** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments
    +	 * from the new skin are attached if the corresponding attachment from the old skin was attached.
    +	 * @param newSkin May be null. */
    +	setSkin: function (newSkin) {
    +		if (this.skin && newSkin) newSkin._attachAll(this, this.skin);
    +		this.skin = newSkin;
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotName: function (slotName, attachmentName) {
    +		return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName);
    +	},
    +	/** @return May be null. */
    +	getAttachmentBySlotIndex: function (slotIndex, attachmentName) {
    +		if (this.skin) {
    +			var attachment = this.skin.getAttachment(slotIndex, attachmentName);
    +			if (attachment) return attachment;
    +		}
    +		if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName);
    +		return null;
    +	},
    +	/** @param attachmentName May be null. */
    +	setAttachment: function (slotName, attachmentName) {
    +		var slots = this.slots;
    +		for (var i = 0, n = slots.size; i < n; i++) {
    +			var slot = slots[i];
    +			if (slot.data.name == slotName) {
    +				var attachment = null;
    +				if (attachmentName) {
    +					
    +					attachment = this.getAttachment(i, attachmentName);
    +					if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName;
    +				}
    +				
    +				slot.setAttachment(attachment);
    +				return;
    +			}
    +		}
    +		throw "Slot not found: " + slotName;
    +	},
    +	update: function (delta) {
    +		time += delta;
    +	}
    +};
    +
    +spine.AttachmentType = {
    +	region: 0
    +};
    +
    +spine.RegionAttachment = function () {
    +	this.offset = [];
    +	this.offset.length = 8;
    +	this.uvs = [];
    +	this.uvs.length = 8;
    +};
    +spine.RegionAttachment.prototype = {
    +	x: 0, y: 0,
    +	rotation: 0,
    +	scaleX: 1, scaleY: 1,
    +	width: 0, height: 0,
    +	rendererObject: null,
    +	regionOffsetX: 0, regionOffsetY: 0,
    +	regionWidth: 0, regionHeight: 0,
    +	regionOriginalWidth: 0, regionOriginalHeight: 0,
    +	setUVs: function (u, v, u2, v2, rotate) {
    +		var uvs = this.uvs;
    +		if (rotate) {
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v2;
    +			uvs[4/*X3*/] = u;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v;
    +			uvs[0/*X1*/] = u2;
    +			uvs[1/*Y1*/] = v2;
    +		} else {
    +			uvs[0/*X1*/] = u;
    +			uvs[1/*Y1*/] = v2;
    +			uvs[2/*X2*/] = u;
    +			uvs[3/*Y2*/] = v;
    +			uvs[4/*X3*/] = u2;
    +			uvs[5/*Y3*/] = v;
    +			uvs[6/*X4*/] = u2;
    +			uvs[7/*Y4*/] = v2;
    +		}
    +	},
    +	updateOffset: function () {
    +		var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX;
    +		var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY;
    +		var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX;
    +		var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY;
    +		var localX2 = localX + this.regionWidth * regionScaleX;
    +		var localY2 = localY + this.regionHeight * regionScaleY;
    +		var radians = this.rotation * Math.PI / 180;
    +		var cos = Math.cos(radians);
    +		var sin = Math.sin(radians);
    +		var localXCos = localX * cos + this.x;
    +		var localXSin = localX * sin;
    +		var localYCos = localY * cos + this.y;
    +		var localYSin = localY * sin;
    +		var localX2Cos = localX2 * cos + this.x;
    +		var localX2Sin = localX2 * sin;
    +		var localY2Cos = localY2 * cos + this.y;
    +		var localY2Sin = localY2 * sin;
    +		var offset = this.offset;
    +		offset[0/*X1*/] = localXCos - localYSin;
    +		offset[1/*Y1*/] = localYCos + localXSin;
    +		offset[2/*X2*/] = localXCos - localY2Sin;
    +		offset[3/*Y2*/] = localY2Cos + localXSin;
    +		offset[4/*X3*/] = localX2Cos - localY2Sin;
    +		offset[5/*Y3*/] = localY2Cos + localX2Sin;
    +		offset[6/*X4*/] = localX2Cos - localYSin;
    +		offset[7/*Y4*/] = localYCos + localX2Sin;
    +	},
    +	computeVertices: function (x, y, bone, vertices) {
    +		
    +		x += bone.worldX;
    +		y += bone.worldY;
    +		var m00 = bone.m00;
    +		var m01 = bone.m01;
    +		var m10 = bone.m10;
    +		var m11 = bone.m11;
    +		var offset = this.offset;
    +		vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x;
    +		vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y;
    +		vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x;
    +		vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y;
    +		vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x;
    +		vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y;
    +		vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x;
    +		vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y;
    +	}
    +}
    +
    +spine.AnimationStateData = function (skeletonData) {
    +	this.skeletonData = skeletonData;
    +	this.animationToMixTime = {};
    +};
    +spine.AnimationStateData.prototype = {
    +	setMixByName: function (fromName, toName, duration) {
    +		var from = this.skeletonData.findAnimation(fromName);
    +		if (!from) throw "Animation not found: " + fromName;
    +		var to = this.skeletonData.findAnimation(toName);
    +		if (!to) throw "Animation not found: " + toName;
    +		this.setMix(from, to, duration);
    +	},
    +	setMix: function (from, to, duration) {
    +		this.animationToMixTime[from.name + ":" + to.name] = duration;
    +	},
    +	getMix: function (from, to) {
    +		var time = this.animationToMixTime[from.name + ":" + to.name];
    +		return time ? time : 0;
    +	}
    +};
    +
    +spine.AnimationState = function (stateData) {
    +	this.data = stateData;
    +	this.queue = [];
    +};
    +spine.AnimationState.prototype = {
    +	current: null,
    +	previous: null,
    +	currentTime: 0,
    +	previousTime: 0,
    +	currentLoop: false,
    +	previousLoop: false,
    +	mixTime: 0,
    +	mixDuration: 0,
    +	update: function (delta) {
    +		this.currentTime += delta;
    +		this.previousTime += delta;
    +		this.mixTime += delta;
    +
    +		if (this.queue.length > 0) {
    +			var entry = this.queue[0];
    +			if (this.currentTime >= entry.delay) {
    +				this._setAnimation(entry.animation, entry.loop);
    +				this.queue.shift();
    +			}
    +		}
    +	},
    +	apply: function (skeleton) {
    +		if (!this.current) return;
    +		if (this.previous) {
    +			this.previous.apply(skeleton, this.previousTime, this.previousLoop);
    +			var alpha = this.mixTime / this.mixDuration;
    +			if (alpha >= 1) {
    +				alpha = 1;
    +				this.previous = null;
    +			}
    +			this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha);
    +		} else 
    +			this.current.apply(skeleton, this.currentTime, this.currentLoop);
    +	},
    +	clearAnimation: function () {
    +		this.previous = null;
    +		this.current = null;
    +		this.queue.length = 0;
    +	},
    +	_setAnimation: function (animation, loop) {
    +		this.previous = null;
    +		if (animation && this.current) {
    +			this.mixDuration = this.data.getMix(this.current, animation);
    +			if (this.mixDuration > 0) {
    +				this.mixTime = 0;
    +				this.previous = this.current;
    +				this.previousTime = this.currentTime;
    +				this.previousLoop = this.currentLoop;
    +			}
    +		}
    +		this.current = animation;
    +		this.currentLoop = loop;
    +		this.currentTime = 0;
    +	},
    +	/** @see #setAnimation(Animation, Boolean) */
    +	setAnimationByName: function (animationName, loop) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.setAnimation(animation, loop);
    +	},
    +	/** Set the current animation. Any queued animations are cleared and the current animation time is set to 0.
    +	 * @param animation May be null. */
    +	setAnimation: function (animation, loop) {
    +		this.queue.length = 0;
    +		this._setAnimation(animation, loop);
    +	},
    +	/** @see #addAnimation(Animation, Boolean, Number) */
    +	addAnimationByName: function (animationName, loop, delay) {
    +		var animation = this.data.skeletonData.findAnimation(animationName);
    +		if (!animation) throw "Animation not found: " + animationName;
    +		this.addAnimation(animation, loop, delay);
    +	},
    +	/** Adds an animation to be played delay seconds after the current or last queued animation.
    +	 * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */
    +	addAnimation: function (animation, loop, delay) {
    +		var entry = {};
    +		entry.animation = animation;
    +		entry.loop = loop;
    +
    +		if (!delay || delay <= 0) {
    +			var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation;
    +			if (previousAnimation != null)
    +				delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0);
    +			else
    +				delay = 0;
    +		}
    +		entry.delay = delay;
    +
    +		this.queue.push(entry);
    +	},
    +	/** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */
    +	isComplete: function () {
    +		return !this.current || this.currentTime >= this.current.duration;
    +	}
    +};
    +
    +spine.SkeletonJson = function (attachmentLoader) {
    +	this.attachmentLoader = attachmentLoader;
    +};
    +spine.SkeletonJson.prototype = {
    +	scale: 1,
    +	readSkeletonData: function (root) {
    +		var skeletonData = new spine.SkeletonData();
    +
    +		// Bones.
    +		var bones = root["bones"];
    +		for (var i = 0, n = bones.length; i < n; i++) {
    +			var boneMap = bones[i];
    +			var parent = null;
    +			if (boneMap["parent"]) {
    +				parent = skeletonData.findBone(boneMap["parent"]);
    +				if (!parent) throw "Parent bone not found: " + boneMap["parent"];
    +			}
    +			var boneData = new spine.BoneData(boneMap["name"], parent);
    +			boneData.length = (boneMap["length"] || 0) * this.scale;
    +			boneData.x = (boneMap["x"] || 0) * this.scale;
    +			boneData.y = (boneMap["y"] || 0) * this.scale;
    +			boneData.rotation = (boneMap["rotation"] || 0);
    +			boneData.scaleX = boneMap["scaleX"] || 1;
    +			boneData.scaleY = boneMap["scaleY"] || 1;
    +			skeletonData.bones.push(boneData);
    +		}
    +
    +		// Slots.
    +		var slots = root["slots"];
    +		for (var i = 0, n = slots.length; i < n; i++) {
    +			var slotMap = slots[i];
    +			var boneData = skeletonData.findBone(slotMap["bone"]);
    +			if (!boneData) throw "Slot bone not found: " + slotMap["bone"];
    +			var slotData = new spine.SlotData(slotMap["name"], boneData);
    +
    +			var color = slotMap["color"];
    +			if (color) {
    +				slotData.r = spine.SkeletonJson.toColor(color, 0);
    +				slotData.g = spine.SkeletonJson.toColor(color, 1);
    +				slotData.b = spine.SkeletonJson.toColor(color, 2);
    +				slotData.a = spine.SkeletonJson.toColor(color, 3);
    +			}
    +
    +			slotData.attachmentName = slotMap["attachment"];
    +
    +			skeletonData.slots.push(slotData);
    +		}
    +
    +		// Skins.
    +		var skins = root["skins"];
    +		for (var skinName in skins) {
    +			if (!skins.hasOwnProperty(skinName)) continue;
    +			var skinMap = skins[skinName];
    +			var skin = new spine.Skin(skinName);
    +			for (var slotName in skinMap) {
    +				if (!skinMap.hasOwnProperty(slotName)) continue;
    +				var slotIndex = skeletonData.findSlotIndex(slotName);
    +				var slotEntry = skinMap[slotName];
    +				for (var attachmentName in slotEntry) {
    +					if (!slotEntry.hasOwnProperty(attachmentName)) continue;
    +					var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]);
    +					if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment);
    +				}
    +			}
    +			skeletonData.skins.push(skin);
    +			if (skin.name == "default") skeletonData.defaultSkin = skin;
    +		}
    +
    +		// Animations.
    +		var animations = root["animations"];
    +		for (var animationName in animations) {
    +			if (!animations.hasOwnProperty(animationName)) continue;
    +			this.readAnimation(animationName, animations[animationName], skeletonData);
    +		}
    +
    +		return skeletonData;
    +	},
    +	readAttachment: function (skin, name, map) {
    +		name = map["name"] || name;
    +
    +		var type = spine.AttachmentType[map["type"] || "region"];
    +		
    +		// @ekelokorpi
    +		// var attachment = this.attachmentLoader.newAttachment(skin, type, name);
    +		var attachment = new spine.RegionAttachment();
    +		
    +		// @Doormat23
    +		// add the name of the attachment
    +		attachment.name = name;
    +		
    +		if (type == spine.AttachmentType.region) {
    +			attachment.x = (map["x"] || 0) * this.scale;
    +			attachment.y = (map["y"] || 0) * this.scale;
    +			attachment.scaleX = map["scaleX"] || 1;
    +			attachment.scaleY = map["scaleY"] || 1;
    +			attachment.rotation = map["rotation"] || 0;
    +			attachment.width = (map["width"] || 32) * this.scale;
    +			attachment.height = (map["height"] || 32) * this.scale;
    +			attachment.updateOffset();
    +		}
    +
    +		return attachment;
    +	},
    +	readAnimation: function (name, map, skeletonData) {
    +		var timelines = [];
    +		var duration = 0;
    +
    +		var bones = map["bones"];
    +		for (var boneName in bones) {
    +			if (!bones.hasOwnProperty(boneName)) continue;
    +			var boneIndex = skeletonData.findBoneIndex(boneName);
    +			if (boneIndex == -1) throw "Bone not found: " + boneName;
    +			var boneMap = bones[boneName];
    +
    +			for (var timelineName in boneMap) {
    +				if (!boneMap.hasOwnProperty(timelineName)) continue;
    +				var values = boneMap[timelineName];
    +				if (timelineName == "rotate") {
    +					var timeline = new spine.RotateTimeline(values.length);
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]);
    +
    +				} else if (timelineName == "translate" || timelineName == "scale") {
    +					var timeline;
    +					var timelineScale = 1;
    +					if (timelineName == "scale")
    +						timeline = new spine.ScaleTimeline(values.length);
    +					else {
    +						timeline = new spine.TranslateTimeline(values.length);
    +						timelineScale = this.scale;
    +					}
    +					timeline.boneIndex = boneIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var x = (valueMap["x"] || 0) * timelineScale;
    +						var y = (valueMap["y"] || 0) * timelineScale;
    +						timeline.setFrame(frameIndex, valueMap["time"], x, y);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]);
    +					
    +				} else
    +					throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")";
    +			}
    +		}
    +		var slots = map["slots"];
    +		for (var slotName in slots) {
    +			if (!slots.hasOwnProperty(slotName)) continue;
    +			var slotMap = slots[slotName];
    +			var slotIndex = skeletonData.findSlotIndex(slotName);
    +
    +			for (var timelineName in slotMap) {
    +				if (!slotMap.hasOwnProperty(timelineName)) continue;
    +				var values = slotMap[timelineName];
    +				if (timelineName == "color") {
    +					var timeline = new spine.ColorTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						var color = valueMap["color"];
    +						var r = spine.SkeletonJson.toColor(color, 0);
    +						var g = spine.SkeletonJson.toColor(color, 1);
    +						var b = spine.SkeletonJson.toColor(color, 2);
    +						var a = spine.SkeletonJson.toColor(color, 3);
    +						timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a);
    +						spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap);
    +						frameIndex++;
    +					}
    +					timelines.push(timeline);
    +					duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]);
    +
    +				} else if (timelineName == "attachment") {
    +					var timeline = new spine.AttachmentTimeline(values.length);
    +					timeline.slotIndex = slotIndex;
    +
    +					var frameIndex = 0;
    +					for (var i = 0, n = values.length; i < n; i++) {
    +						var valueMap = values[i];
    +						timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]);
    +					}
    +					timelines.push(timeline);
    +					// PIXI FIX
    +					duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]);
    +				} else
    +					throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")";
    +			}
    +		}
    +		skeletonData.animations.push(new spine.Animation(name, timelines, duration));
    +	}
    +};
    +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) {
    +	var curve = valueMap["curve"];
    +	if (!curve) return;
    +	if (curve == "stepped")
    +		timeline.curves.setStepped(frameIndex);
    +	else if (curve instanceof Array)
    +		timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]);
    +};
    +spine.SkeletonJson.toColor = function (hexString, colorIndex) {
    +	if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString;
    +	return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255;
    +};
    +
    +spine.Atlas = function (atlasText, textureLoader) {
    +	this.textureLoader = textureLoader;
    +	this.pages = [];
    +	this.regions = [];
    +
    +	var reader = new spine.AtlasReader(atlasText);
    +	var tuple = [];
    +	tuple.length = 4;
    +	var page = null;
    +	while (true) {
    +		var line = reader.readLine();
    +		if (line == null) break;
    +		line = reader.trim(line);
    +		if (line.length == 0)
    +			page = null;
    +		else if (!page) {
    +			page = new spine.AtlasPage();
    +			page.name = line;
    +
    +			page.format = spine.Atlas.Format[reader.readValue()];
    +
    +			reader.readTuple(tuple);
    +			page.minFilter = spine.Atlas.TextureFilter[tuple[0]];
    +			page.magFilter = spine.Atlas.TextureFilter[tuple[1]];
    +
    +			var direction = reader.readValue();
    +			page.uWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			page.vWrap = spine.Atlas.TextureWrap.clampToEdge;
    +			if (direction == "x")
    +				page.uWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "y")
    +				page.vWrap = spine.Atlas.TextureWrap.repeat;
    +			else if (direction == "xy")
    +				page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat;
    +
    +			textureLoader.load(page, line);
    +
    +			this.pages.push(page);
    +
    +		} else {
    +			var region = new spine.AtlasRegion();
    +			region.name = line;
    +			region.page = page;
    +
    +			region.rotate = reader.readValue() == "true";
    +
    +			reader.readTuple(tuple);
    +			var x = parseInt(tuple[0]);
    +			var y = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			var width = parseInt(tuple[0]);
    +			var height = parseInt(tuple[1]);
    +
    +			region.u = x / page.width;
    +			region.v = y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (x + height) / page.width;
    +				region.v2 = (y + width) / page.height;
    +			} else {
    +				region.u2 = (x + width) / page.width;
    +				region.v2 = (y + height) / page.height;
    +			}
    +			region.x = x;
    +			region.y = y;
    +			region.width = Math.abs(width);
    +			region.height = Math.abs(height);
    +
    +			if (reader.readTuple(tuple) == 4) { // split is optional
    +				region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +				if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits
    +					region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])];
    +
    +					reader.readTuple(tuple);
    +				}
    +			}
    +
    +			region.originalWidth = parseInt(tuple[0]);
    +			region.originalHeight = parseInt(tuple[1]);
    +
    +			reader.readTuple(tuple);
    +			region.offsetX = parseInt(tuple[0]);
    +			region.offsetY = parseInt(tuple[1]);
    +
    +			region.index = parseInt(reader.readValue());
    +
    +			this.regions.push(region);
    +		}
    +	}
    +};
    +spine.Atlas.prototype = {
    +	findRegion: function (name) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++)
    +			if (regions[i].name == name) return regions[i];
    +		return null;
    +	},
    +	dispose: function () {
    +		var pages = this.pages;
    +		for (var i = 0, n = pages.length; i < n; i++)
    +			this.textureLoader.unload(pages[i].rendererObject);
    +	},
    +	updateUVs: function (page) {
    +		var regions = this.regions;
    +		for (var i = 0, n = regions.length; i < n; i++) {
    +			var region = regions[i];
    +			if (region.page != page) continue;
    +			region.u = region.x / page.width;
    +			region.v = region.y / page.height;
    +			if (region.rotate) {
    +				region.u2 = (region.x + region.height) / page.width;
    +				region.v2 = (region.y + region.width) / page.height;
    +			} else {
    +				region.u2 = (region.x + region.width) / page.width;
    +				region.v2 = (region.y + region.height) / page.height;
    +			}
    +		}
    +	}
    +};
    +
    +spine.Atlas.Format = {
    +	alpha: 0,
    +	intensity: 1,
    +	luminanceAlpha: 2,
    +	rgb565: 3,
    +	rgba4444: 4,
    +	rgb888: 5,
    +	rgba8888: 6
    +};
    +
    +spine.Atlas.TextureFilter = {
    +	nearest: 0,
    +	linear: 1,
    +	mipMap: 2,
    +	mipMapNearestNearest: 3,
    +	mipMapLinearNearest: 4,
    +	mipMapNearestLinear: 5,
    +	mipMapLinearLinear: 6
    +};
    +
    +spine.Atlas.TextureWrap = {
    +	mirroredRepeat: 0,
    +	clampToEdge: 1,
    +	repeat: 2
    +};
    +
    +spine.AtlasPage = function () {};
    +spine.AtlasPage.prototype = {
    +	name: null,
    +	format: null,
    +	minFilter: null,
    +	magFilter: null,
    +	uWrap: null,
    +	vWrap: null,
    +	rendererObject: null,
    +	width: 0,
    +	height: 0
    +};
    +
    +spine.AtlasRegion = function () {};
    +spine.AtlasRegion.prototype = {
    +	page: null,
    +	name: null,
    +	x: 0, y: 0,
    +	width: 0, height: 0,
    +	u: 0, v: 0, u2: 0, v2: 0,
    +	offsetX: 0, offsetY: 0,
    +	originalWidth: 0, originalHeight: 0,
    +	index: 0,
    +	rotate: false,
    +	splits: null,
    +	pads: null,
    +};
    +
    +spine.AtlasReader = function (text) {
    +	this.lines = text.split(/\r\n|\r|\n/);
    +};
    +spine.AtlasReader.prototype = {
    +	index: 0,
    +	trim: function (value) {
    +		return value.replace(/^\s+|\s+$/g, "");
    +	},
    +	readLine: function () {
    +		if (this.index >= this.lines.length) return null;
    +		return this.lines[this.index++];
    +	},
    +	readValue: function () {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		return this.trim(line.substring(colon + 1));
    +	},
    +	/** Returns the number of tuple values read (2 or 4). */
    +	readTuple: function (tuple) {
    +		var line = this.readLine();
    +		var colon = line.indexOf(":");
    +		if (colon == -1) throw "Invalid line: " + line;
    +		var i = 0, lastMatch= colon + 1;
    +		for (; i < 3; i++) {
    +			var comma = line.indexOf(",", lastMatch);
    +			if (comma == -1) {
    +				if (i == 0) throw "Invalid line: " + line;
    +				break;
    +			}
    +			tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch));
    +			lastMatch = comma + 1;
    +		}
    +		tuple[i] = this.trim(line.substring(lastMatch));
    +		return i + 1;
    +	}
    +}
    +
    +spine.AtlasAttachmentLoader = function (atlas) {
    +	this.atlas = atlas;
    +}
    +spine.AtlasAttachmentLoader.prototype = {
    +	newAttachment: function (skin, type, name) {
    +		switch (type) {
    +		case spine.AttachmentType.region:
    +			var region = this.atlas.findRegion(name);
    +			if (!region) throw "Region not found in atlas: " + name + " (" + type + ")";
    +			var attachment = new spine.RegionAttachment(name);
    +			attachment.rendererObject = region;
    +			attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate);
    +			attachment.regionOffsetX = region.offsetX;
    +			attachment.regionOffsetY = region.offsetY;
    +			attachment.regionWidth = region.width;
    +			attachment.regionHeight = region.height;
    +			attachment.regionOriginalWidth = region.originalWidth;
    +			attachment.regionOriginalHeight = region.originalHeight;
    +			return attachment;
    +		}
    +		throw "Unknown attachment type: " + type;
    +	}
    +}
    +
    +PIXI.AnimCache = {};
    +spine.Bone.yDown = true;
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_extras_Strip.js.html b/docs/files/src_pixi_extras_Strip.js.html index 75819bf..707f69c 100644 --- a/docs/files/src_pixi_extras_Strip.js.html +++ b/docs/files/src_pixi_extras_Strip.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_extras_TilingSprite.js.html b/docs/files/src_pixi_extras_TilingSprite.js.html index 21544a8..bf66ef2 100644 --- a/docs/files/src_pixi_extras_TilingSprite.js.html +++ b/docs/files/src_pixi_extras_TilingSprite.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_AssetLoader.js.html b/docs/files/src_pixi_loaders_AssetLoader.js.html index dedd0ae..8cc5414 100644 --- a/docs/files/src_pixi_loaders_AssetLoader.js.html +++ b/docs/files/src_pixi_loaders_AssetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -163,10 +169,13 @@ "jpeg": PIXI.ImageLoader, "png": PIXI.ImageLoader, "gif": PIXI.ImageLoader, - "json": PIXI.SpriteSheetLoader, + "json": PIXI.JsonLoader, + "anim": PIXI.SpineLoader, "xml": PIXI.BitmapFontLoader, "fnt": PIXI.BitmapFontLoader }; + + }; /** diff --git a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html index 7026aa8..60d87a8 100644 --- a/docs/files/src_pixi_loaders_BitmapFontLoader.js.html +++ b/docs/files/src_pixi_loaders_BitmapFontLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -223,7 +229,9 @@ xOffset: parseInt(letters[i].attributes.getNamedItem("xoffset").nodeValue, 10), yOffset: parseInt(letters[i].attributes.getNamedItem("yoffset").nodeValue, 10), xAdvance: parseInt(letters[i].attributes.getNamedItem("xadvance").nodeValue, 10), - kerning: {} + kerning: {}, + texture:new PIXI.Texture(this.texture, textureRect) + }; } @@ -238,6 +246,7 @@ data.chars[second].kerning[first] = amount; } + PIXI.BitmapText.fonts[data.font] = data; var scope = this; diff --git a/docs/files/src_pixi_loaders_ImageLoader.js.html b/docs/files/src_pixi_loaders_ImageLoader.js.html index 40817d1..49420a5 100644 --- a/docs/files/src_pixi_loaders_ImageLoader.js.html +++ b/docs/files/src_pixi_loaders_ImageLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_loaders_JsonLoader.js.html b/docs/files/src_pixi_loaders_JsonLoader.js.html new file mode 100644 index 0000000..dc9f17c --- /dev/null +++ b/docs/files/src_pixi_loaders_JsonLoader.js.html @@ -0,0 +1,288 @@ + + + + + src/pixi/loaders/JsonLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/JsonLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + */
    +
    +/**
    + * The json file loader is used to load in JSON data and parsing it
    + * When loaded this class will dispatch a "loaded" event
    + * If load failed this class will dispatch a "error" event
    + * @class JsonLoader
    + * @extends EventTarget
    + * @constructor
    + * @param {String} url the url of the JSON file
    + * @param {Boolean} crossorigin
    + */
    +
    +PIXI.JsonLoader = function (url, crossorigin) {
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.baseUrl = url.replace(/[^\/]*$/, "");
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +	
    +};
    +
    +// constructor
    +PIXI.JsonLoader.constructor = PIXI.JsonLoader;
    +
    +/**
    + * This will begin loading the JSON file
    + */
    +PIXI.JsonLoader.prototype.load = function () {
    +	this.ajaxRequest = new AjaxRequest();
    +	var scope = this;
    +	this.ajaxRequest.onreadystatechange = function () {
    +		scope.onJSONLoaded();
    +	};
    +
    +	this.ajaxRequest.open("GET", this.url, true);
    +	if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json");
    +	this.ajaxRequest.send(null);
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onJSONLoaded = function () {
    +	if (this.ajaxRequest.readyState == 4) {
    +		if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) {
    +			this.json = JSON.parse(this.ajaxRequest.responseText);
    +			
    +			if(this.json.frames)
    +			{
    +				// sprite sheet
    +				var scope = this;
    +				var textureUrl = this.baseUrl + this.json.meta.image;
    +				var image = new PIXI.ImageLoader(textureUrl, this.crossorigin);
    +				var frameData = this.json.frames;
    +			
    +				this.texture = image.texture.baseTexture;
    +				image.addEventListener("loaded", function (event) {
    +					scope.onLoaded();
    +				});
    +			
    +				for (var i in frameData) {
    +					var rect = frameData[i].frame;
    +					if (rect) {
    +						PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {
    +							x: rect.x,
    +							y: rect.y,
    +							width: rect.w,
    +							height: rect.h
    +						});
    +						if (frameData[i].trimmed) {
    +							//var realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize;
    +							PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w)
    +							// calculate the offset!
    +						}
    +					}
    +				}
    +			
    +				image.load();
    +				
    +			}
    +			else if(this.json.bones)
    +			{
    +				// spine animation
    +				var spineJsonParser = new spine.SkeletonJson();
    +				var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +				PIXI.AnimCache[this.url] = skeletonData;
    +				this.onLoaded();
    +			}
    +			else
    +			{
    +				this.onLoaded();
    +			}
    +			
    +			
    +			
    +			
    +		} else {
    +			this.onError();
    +		}
    +	}
    +};
    +
    +/**
    + * Invoke when json file loaded
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onLoaded = function () {
    +	this.loaded = true;
    +	this.dispatchEvent({
    +		type: "loaded",
    +		content: this
    +	});
    +};
    +
    +/**
    + * Invoke when error occured
    + * @private
    + */
    +PIXI.JsonLoader.prototype.onError = function () {
    +	this.dispatchEvent({
    +		type: "error",
    +		content: this
    +	});
    +};
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpineLoader.js.html b/docs/files/src_pixi_loaders_SpineLoader.js.html new file mode 100644 index 0000000..dad29d2 --- /dev/null +++ b/docs/files/src_pixi_loaders_SpineLoader.js.html @@ -0,0 +1,236 @@ + + + + + src/pixi/loaders/SpineLoader.js - Pixi.JS + + + + + + + + +
    +
    +
    + +

    + +
    +
    + API Docs for: 1.0.0 +
    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + + +
    +
    +
    +

    File: src/pixi/loaders/SpineLoader.js

    + +
    +
    +/**
    + * @author Mat Groves http://matgroves.com/ @Doormat23
    + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi
    + * 
    + * Awesome JS run time provided by EsotericSoftware
    + * https://github.com/EsotericSoftware/spine-runtimes
    + * 
    + */
    +
    +/**
    + * The Spine loader is used to load in JSON spine data
    + * To generate the data you need to use http://esotericsoftware.com/ and export the "JSON" format
    + * Due to a clash of names  You will need to change the extension of the spine file from *.json to *.anim for it to load
    + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source
    + * You will need to generate a sprite sheet to accompany the spine data 
    + * When loaded this class will dispatch a "loaded" event
    + * @class Spine
    + * @constructor
    + * @extends EventTarget
    + * @param {String} url the url of the sprite sheet JSON file
    + * @param {Boolean} crossorigin
    + */
    +PIXI.SpineLoader = function(url, crossorigin) 
    +{
    +	PIXI.EventTarget.call(this);
    +	this.url = url;
    +	this.crossorigin = crossorigin;
    +	this.loaded = false;
    +}
    +
    +PIXI.SpineLoader.constructor = PIXI.SpineLoader;
    +
    +PIXI.SpineLoader.prototype.load = function()
    +{
    +	new PIXI.JsonLoader(this.url, this.crossorigin);
    +		jsonLoader.addEventListener("loaded", function (event) {
    +			scope.json = event.content.json;
    +			scope.onJSONLoaded();
    +		});
    +		jsonLoader.load();
    +};
    +
    +PIXI.SpineLoader.prototype.load = function () {
    +	
    +	var scope = this;
    +	var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin);
    +	jsonLoader.addEventListener("loaded", function (event) {
    +		scope.json = event.content.json;
    +		scope.onJSONLoaded();
    +	});
    +	jsonLoader.load();
    +};
    +
    +/**
    + * Invoke when JSON file is loaded
    + * @private
    + */
    +PIXI.SpineLoader.prototype.onJSONLoaded = function (event) {
    +	
    +	var spineJsonParser = new spine.SkeletonJson();
    +	
    +	var skeletonData = spineJsonParser.readSkeletonData(this.json);
    +	
    +	PIXI.AnimCache[this.url] = skeletonData;
    +
    +	this.onLoaded();
    +};
    +
    +
    +			
    +PIXI.SpineLoader.prototype.onLoaded = function()
    +{
    +	this.loaded = true;
    +    this.dispatchEvent({type: "loaded", content: this});
    +};
    +
    +
    +    
    +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html index 981b709..109bc09 100644 --- a/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html +++ b/docs/files/src_pixi_loaders_SpriteSheetLoader.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -151,8 +157,7 @@ * @param {Boolean} crossorigin */ -PIXI.SpriteSheetLoader = function(url, crossorigin) -{ +PIXI.SpriteSheetLoader = function (url, crossorigin) { /* * i use texture packer to load the assets.. * http://www.codeandweb.com/texturepacker @@ -172,71 +177,61 @@ /** * This will begin loading the JSON file */ -PIXI.SpriteSheetLoader.prototype.load = function() -{ - this.ajaxRequest = new AjaxRequest(); +PIXI.SpriteSheetLoader.prototype.load = function () { var scope = this; - this.ajaxRequest.onreadystatechange = function() - { + var jsonLoader = new PIXI.JsonLoader(this.url, this.crossorigin); + jsonLoader.addEventListener("loaded", function (event) { + scope.json = event.content.json; scope.onJSONLoaded(); - }; - - this.ajaxRequest.open("GET", this.url, true); - if (this.ajaxRequest.overrideMimeType) this.ajaxRequest.overrideMimeType("application/json"); - this.ajaxRequest.send(null) + }); + jsonLoader.load(); }; /** * Invoke when JSON file is loaded * @private */ -PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function() -{ - if (this.ajaxRequest.readyState == 4) - { - if (this.ajaxRequest.status == 200 || window.location.href.indexOf("http") == -1) - { - var jsonData = eval("(" + this.ajaxRequest.responseText + ")"); - var textureUrl = this.baseUrl + jsonData.meta.image; +PIXI.SpriteSheetLoader.prototype.onJSONLoaded = function () { + var scope = this; + var textureUrl = this.baseUrl + this.json.meta.image; + var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); + var frameData = this.json.frames; - var image = new PIXI.ImageLoader(textureUrl, this.crossorigin); - this.texture = image.texture.baseTexture; - var scope = this; - image.addEventListener("loaded", function(event) { - scope.onLoaded(); - }); + this.texture = image.texture.baseTexture; + image.addEventListener("loaded", function (event) { + scope.onLoaded(); + }); - var frameData = jsonData.frames; - for (var i in frameData) - { - var rect = frameData[i].frame; - if (rect) - { - PIXI.TextureCache[i] = new PIXI.Texture(this.texture, {x:rect.x, y:rect.y, width:rect.w, height:rect.h}); - - if(frameData[i].trimmed) - { - //var realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; - PIXI.TextureCache[i].trim.x = 0;// (realSize.x / rect.w) - // calculate the offset! - } - } - } + for (var i in frameData) { + var rect = frameData[i].frame; + if (rect) { + PIXI.TextureCache[i] = new PIXI.Texture(this.texture, { + x: rect.x, + y: rect.y, + width: rect.w, + height: rect.h + }); + if (frameData[i].trimmed) { + //var realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].realSize = frameData[i].spriteSourceSize; + PIXI.TextureCache[i].trim.x = 0; // (realSize.x / rect.w) + // calculate the offset! + } + } + } - image.load(); - } - } + image.load(); }; /** * Invoke when all files are loaded (json and texture) * @private */ -PIXI.SpriteSheetLoader.prototype.onLoaded = function() -{ - this.dispatchEvent({type: "loaded", content: this}); +PIXI.SpriteSheetLoader.prototype.onLoaded = function () { + this.dispatchEvent({ + type: "loaded", + content: this + }); }; -
    diff --git a/docs/files/src_pixi_renderers_CanvasRenderer.js.html b/docs/files/src_pixi_renderers_CanvasRenderer.js.html index c6daf68..450575b 100644 --- a/docs/files/src_pixi_renderers_CanvasRenderer.js.html +++ b/docs/files/src_pixi_renderers_CanvasRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -333,9 +339,12 @@ } // render! - for (var i=0; i < displayObject.children.length; i++) + if(displayObject.children) { - this.renderDisplayObject(displayObject.children[i]); + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } } this.context.setTransform(1,0,0,1,0,0); diff --git a/docs/files/src_pixi_renderers_WebGLBatch.js.html b/docs/files/src_pixi_renderers_WebGLBatch.js.html index 727b9db..35eccd3 100644 --- a/docs/files/src_pixi_renderers_WebGLBatch.js.html +++ b/docs/files/src_pixi_renderers_WebGLBatch.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -367,6 +373,7 @@ //console.log(val + " SAME?"); var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); batch.init(sprite); + batch.texture = this.texture; batch.tail = this.tail; //console.log("id is " +batcheee.id) @@ -573,7 +580,6 @@ tx = worldTransform[2]; ty = worldTransform[5]; - this.verticies[index + 0 ] = a * w1 + c * h1 + tx; this.verticies[index + 1 ] = d * h1 + b * w1 + ty; @@ -659,6 +665,7 @@ { this.refresh(); this.dirty = false; + } if (this.size == 0)return; diff --git a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html index 42bcabd..264cc48 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderGroup.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -165,6 +171,8 @@ // has this changed?? if(this.root)this.removeDisplayObjectAndChildren(this.root); + displayObject.worldVisible = displayObject.visible; + // soooooo // // to check if any batchs exist already?? @@ -177,25 +185,21 @@ PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; // set the flipped matrix.. gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); - - for (var i=0; i < this.toRemove.length; i++) - { - this.removeDisplayObjectAndChildren(this.toRemove[i]); - }; - - this.toRemove = []; - + // TODO remove this by replacing visible with getter setters.. this.checkVisibility(this.root, this.root.visible); // will render all the elements in the group var renderable; + + for (var i=0; i < this.batchs.length; i++) { renderable = this.batchs[i]; @@ -217,7 +221,7 @@ PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) { - //PIXI.WebGLRenderer.updateTextures(); + PIXI.WebGLRenderer.updateTextures(); var gl = this.gl; this.checkVisibility(displayObject, displayObject.visible); @@ -411,8 +415,9 @@ child.textureChange = false; if(child.worldVisible) { - this.removeDisplayObject(child) - this.addDisplayObject(child) + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); } // update texture!! } @@ -424,6 +429,106 @@ }; } +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) { // add a child to the render group.. diff --git a/docs/files/src_pixi_renderers_WebGLRenderer.js.html b/docs/files/src_pixi_renderers_WebGLRenderer.js.html index 551dd19..15ac256 100644 --- a/docs/files/src_pixi_renderers_WebGLRenderer.js.html +++ b/docs/files/src_pixi_renderers_WebGLRenderer.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -182,7 +188,7 @@ PIXI.gl = this.gl = this.view.getContext("experimental-webgl", { alpha: this.transparent, antialias:false, // SPEED UP?? - premultipliedAlpha:true + premultipliedAlpha:false }); } catch (e) @@ -325,7 +331,7 @@ gl.bindFramebuffer(gl.FRAMEBUFFER, null); - gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], this.transparent); + gl.clearColor(stage.backgroundColorSplit[0],stage.backgroundColorSplit[1],stage.backgroundColorSplit[2], !this.transparent); gl.clear(gl.COLOR_BUFFER_BIT); diff --git a/docs/files/src_pixi_renderers_WebGLShaders.js.html b/docs/files/src_pixi_renderers_WebGLShaders.js.html index 2596ea9..ad8f09b 100644 --- a/docs/files/src_pixi_renderers_WebGLShaders.js.html +++ b/docs/files/src_pixi_renderers_WebGLShaders.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_text_BitmapText.js.html b/docs/files/src_pixi_text_BitmapText.js.html index d28e928..c8f4d4c 100644 --- a/docs/files/src_pixi_text_BitmapText.js.html +++ b/docs/files/src_pixi_text_BitmapText.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -231,7 +237,7 @@ { pos.x += charData.kerning[prevCharCode]; } - chars.push({line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); pos.x += charData.xAdvance; prevCharCode = charCode; @@ -257,11 +263,11 @@ for(i = 0; i < chars.length; i++) { - var char = PIXI.Sprite.fromFrame(chars[i].charCode); - char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; - char.position.y = chars[i].position.y * scale; - char.scale.x = char.scale.y = scale; - this.addChild(char); + var c = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + c.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + c.position.y = chars[i].position.y * scale; + c.scale.x = c.scale.y = scale; + this.addChild(c); } this.width = pos.x * scale; diff --git a/docs/files/src_pixi_text_Text.js.html b/docs/files/src_pixi_text_Text.js.html index 3b71048..042193f 100644 --- a/docs/files/src_pixi_text_Text.js.html +++ b/docs/files/src_pixi_text_Text.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -148,6 +154,8 @@ * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text = function(text, style) { @@ -173,8 +181,10 @@ * @param {String} [style.font="bold 20pt Arial"] The style and size of the font * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") - * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {String} [style.stroke="black"] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap */ PIXI.Text.prototype.setStyle = function(style) { @@ -182,7 +192,10 @@ style.font = style.font || "bold 20pt Arial"; style.fill = style.fill || "black"; style.align = style.align || "left"; + style.stroke = style.stroke || "black"; //provide a default, see: https://github.com/GoodBoyDigital/pixi.js/issues/136 style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; this.style = style; this.dirty = true; }; @@ -194,7 +207,7 @@ */ PIXI.Sprite.prototype.setText = function(text) { - this.text = text || " "; + this.text = text.toString() || " "; this.dirty = true; }; @@ -205,9 +218,15 @@ PIXI.Text.prototype.updateText = function() { this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); //split text into lines - var lines = this.text.split(/(?:\r\n|\r|\n)/); + var lines = outputText.split(/(?:\r\n|\r|\n)/); //calculate text width var lineWidths = []; @@ -309,7 +328,7 @@ var dummy = document.createElement("div"); var dummyText = document.createTextNode("M"); dummy.appendChild(dummyText); - dummy.setAttribute("style", fontStyle); + dummy.setAttribute("style", fontStyle + ';position:absolute;top:0;left:0'); body.appendChild(dummy); result = dummy.offsetHeight; @@ -321,6 +340,57 @@ return result; }; +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + PIXI.Text.prototype.destroy = function(destroyTexture) { if(destroyTexture) diff --git a/docs/files/src_pixi_textures_BaseTexture.js.html b/docs/files/src_pixi_textures_BaseTexture.js.html index cfc44e7..2b12119 100644 --- a/docs/files/src_pixi_textures_BaseTexture.js.html +++ b/docs/files/src_pixi_textures_BaseTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -224,7 +230,6 @@ PIXI.BaseTexture.prototype.destroy = function() { - if(this.source instanceof Image) { this.source.src = null; @@ -233,7 +238,6 @@ PIXI.texturesToDestroy.push(this); } - /** * * Helper function that returns a base texture based on an image url diff --git a/docs/files/src_pixi_textures_RenderTexture.js.html b/docs/files/src_pixi_textures_RenderTexture.js.html index 4b69b2e..b486c58 100644 --- a/docs/files/src_pixi_textures_RenderTexture.js.html +++ b/docs/files/src_pixi_textures_RenderTexture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -150,7 +156,7 @@ this.width = width || 100; this.height = height || 100; - + this.indetityMatrix = PIXI.mat3.create(); this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); @@ -225,7 +231,7 @@ * This function will draw the display object to the texture. * @method render * @param displayObject {DisplayObject} - * @param clear {Boolean} If true the texture will not be cleared before the displayObject is drawn + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn */ PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) { diff --git a/docs/files/src_pixi_textures_Texture.js.html b/docs/files/src_pixi_textures_Texture.js.html index 84ac9c7..fb7afe4 100644 --- a/docs/files/src_pixi_textures_Texture.js.html +++ b/docs/files/src_pixi_textures_Texture.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Detector.js.html b/docs/files/src_pixi_utils_Detector.js.html index abafab7..9aa0858 100644 --- a/docs/files/src_pixi_utils_Detector.js.html +++ b/docs/files/src_pixi_utils_Detector.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_EventTarget.js.html b/docs/files/src_pixi_utils_EventTarget.js.html index c42b890..56b926c 100644 --- a/docs/files/src_pixi_utils_EventTarget.js.html +++ b/docs/files/src_pixi_utils_EventTarget.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/files/src_pixi_utils_Utils.js.html b/docs/files/src_pixi_utils_Utils.js.html index 60b9cf8..6f4410c 100644 --- a/docs/files/src_pixi_utils_Utils.js.html +++ b/docs/files/src_pixi_utils_Utils.js.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -132,19 +138,38 @@
    -/**
    - * Provides requestAnimationFrame in a cross browser way.
    - */
    -window.requestAnimFrame = (function() {
    -  return window.requestAnimationFrame ||
    -         window.webkitRequestAnimationFrame ||
    -         window.mozRequestAnimationFrame ||
    -         window.oRequestAnimationFrame ||
    -         window.msRequestAnimationFrame ||
    -         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
    -           window.setTimeout(callback, 1000/60);
    -         };
    -})();
    +// http://paulirish.com/2011/requestanimationframe-for-smart-animating/
    +// http://my.opera.com/emoller/blog/2011/12/20/requestanimationframe-for-smart-er-animating
    +
    +// requestAnimationFrame polyfill by Erik Möller. fixes from Paul Irish and Tino Zijdel
    +
    +// MIT license
    +
    +
    +    var lastTime = 0;
    +    var vendors = ['ms', 'moz', 'webkit', 'o'];
    +    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
    +        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
    +        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
    +                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    +    }
    +
    +    if (!window.requestAnimationFrame)
    +        window.requestAnimationFrame = function(callback, element) {
    +            var currTime = new Date().getTime();
    +            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
    +            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
    +              timeToCall);
    +            lastTime = currTime + timeToCall;
    +            return id;
    +        };
    +
    +    if (!window.cancelAnimationFrame)
    +        window.cancelAnimationFrame = function(id) {
    +            clearTimeout(id);
    +        };
    +
    +window.requestAnimFrame = window.requestAnimationFrame;
     
     function HEXtoRGB(hex) {
     	return [(hex >> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255];
    @@ -176,7 +201,7 @@
       })();
     }
     
    -var AjaxRequest = function()
    +var AjaxRequest = PIXI.AjaxRequest = function()
     {
     	var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE
     	
    diff --git a/docs/index.html b/docs/index.html
    index 623dc9a..1c204a9 100644
    --- a/docs/index.html
    +++ b/docs/index.html
    @@ -63,14 +63,20 @@
                 
                     
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • diff --git a/docs/modules/PIXI.html b/docs/modules/PIXI.html index b65943f..921b98e 100644 --- a/docs/modules/PIXI.html +++ b/docs/modules/PIXI.html @@ -63,14 +63,20 @@
  • InteractionManager
  • +
  • JsonLoader
  • +
  • MovieClip
  • Point
  • +
  • Polygon
  • +
  • Rectangle
  • RenderTexture
  • +
  • Spine
  • +
  • Sprite
  • SpriteSheetLoader
  • @@ -225,6 +231,12 @@
  • + + JsonLoader + +
  • + +
  • MovieClip @@ -237,6 +249,12 @@
  • + + Polygon + +
  • + +
  • Rectangle @@ -249,6 +267,12 @@
  • + + Spine + +
  • + +
  • Sprite diff --git a/examples/example 1 - Basics/pixi.js b/examples/example 1 - Basics/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 1 - Basics/pixi.js +++ b/examples/example 1 - Basics/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 10 - Text/pixi.js b/examples/example 10 - Text/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 10 - Text/pixi.js +++ b/examples/example 10 - Text/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 11 - RenderTexture/pixi.js b/examples/example 11 - RenderTexture/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 11 - RenderTexture/pixi.js +++ b/examples/example 11 - RenderTexture/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 12 - Spine/pixi.js b/examples/example 12 - Spine/pixi.js index bffc822..8d55f77 100644 --- a/examples/example 12 - Spine/pixi.js +++ b/examples/example 12 - Spine/pixi.js @@ -152,7 +152,6 @@ return new PIXI.Polygon(points); } -// constructor PIXI.Polygon.constructor = PIXI.Polygon; @@ -5035,7 +5034,7 @@ * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source * @class Spine * @constructor - * @extends + * @extends DisplayObjectContainer * @param {String} url the url of the spine anim file to be used */ PIXI.Spine = function(url) @@ -7528,7 +7527,7 @@ * When loaded this class will dispatch a "loaded" event * @class Spine * @constructor - * @extends + * @extends EventTarget * @param {String} url the url of the sprite sheet JSON file * @param {Boolean} crossorigin */ diff --git a/examples/example 13 - Custom Renderer/index.html b/examples/example 13 - Custom Renderer/index.html new file mode 100644 index 0000000..24d4f04 --- /dev/null +++ b/examples/example 13 - Custom Renderer/index.html @@ -0,0 +1,64 @@ + + + + pixi.js example 12 Spine + + + + + + + + + + + + diff --git a/examples/example 13 - Custom Renderer/pixi.js b/examples/example 13 - Custom Renderer/pixi.js new file mode 100644 index 0000000..c7005f9 --- /dev/null +++ b/examples/example 13 - Custom Renderer/pixi.js @@ -0,0 +1,7515 @@ +/** + * @license + * Pixi.JS - v1.0.0 + * Copyright (c) 2012, Mat Groves + * http://goodboydigital.com/ + * + * Compiled: 2013-06-12 + * + * Pixi.JS is licensed under the MIT License. + * http://www.opensource.org/licenses/mit-license.php + */ +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +(function(){ + + var root = this; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +@module PIXI + */ +var PIXI = PIXI || {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * The Point object represents a location in a two-dimensional coordinate system, where x represents the horizontal axis and y represents the vertical axis. + * @class Point + * @constructor + * @param x {Number} position of the point + * @param y {Number} position of the point + */ +PIXI.Point = function(x, y) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; +} + +/** + * @method clone + * @return a copy of the point + */ +PIXI.Point.prototype.clone = function() +{ + return new PIXI.Point(this.x, this.y); +} + +// constructor +PIXI.Point.constructor = PIXI.Point; + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * the Rectangle object is an area defined by its position, as indicated by its top-left corner point (x, y) and by its width and its height. + * @class Rectangle + * @constructor + * @param x {Number} position of the rectangle + * @param y {Number} position of the rectangle + * @param width {Number} of the rectangle + * @param height {Number} of the rectangle + */ +PIXI.Rectangle = function(x, y, width, height) +{ + /** + * @property x + * @type Number + * @default 0 + */ + this.x = x || 0; + + /** + * @property y + * @type Number + * @default 0 + */ + this.y = y || 0; + + /** + * @property width + * @type Number + * @default 0 + */ + this.width = width || 0; + + /** + * @property height + * @type Number + * @default 0 + */ + this.height = height || 0; +} + +/** + * @method clone + * @return a copy of the rectangle + */ +PIXI.Rectangle.prototype.clone = function() +{ + return new PIXI.Rectangle(this.x, this.y, this.width, this.height); +} + +// constructor +PIXI.Rectangle.constructor = PIXI.Rectangle; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * this is the base class for all objects that are rendered on the screen. + * @class DisplayObject + * @constructor + */ +PIXI.DisplayObject = function() +{ + /** + * The coordinate of the object relative to the local coordinates of the parent. + * @property position + * @type Point + */ + this.position = new PIXI.Point(); + + /** + * The scale factor of the object. + * @property scale + * @type Point + */ + this.scale = new PIXI.Point(1,1);//{x:1, y:1}; + + /** + * The pivot point of the displayObject that it rotates around + * @property pivot + * @type Point + */ + this.pivot = new PIXI.Point(0,0); + + /** + * The rotation of the object in radians. + * @property rotation + * @type Number + */ + this.rotation = 0; + + /** + * The opacity of the object. + * @property alpha + * @type Number + */ + this.alpha = 1; + + /** + * The visibility of the object. + * @property visible + * @type Boolean + */ + this.visible = true; + this.worldVisible = false; + + /** + * [read-only] The display object container that contains this display object. + * @property parent + * @type DisplayObjectContainer + */ + this.parent = null; + + /** + * [read-only] The stage the display object is connected to, or undefined if it is not connected to the stage. + * @property stage + * @type Stage + */ + this.stage = null; + + /** + * This is the defined area that will pick up mouse / touch events. It is null by default. + * Setting it is a neat way of optimising the hitTest function that the interactionManager will use (as it will not need to hit test all the children) + * @property hitArea + * @type Rectangle + */ + this.hitArea = null; + + this.worldAlpha = 1; + this.color = []; + + this.worldTransform = PIXI.mat3.create()//mat3.identity(); + this.localTransform = PIXI.mat3.create()//mat3.identity(); + + this.dynamic = true; + // chach that puppy! + this._sr = 0; + this._cr = 1; + + this.childIndex = 0; + + this.renderable = false; + + // [readonly] best not to toggle directly! use setInteractive() + this.interactive = false; + + /** + * This is used to indicate if the displayObject should display a mouse hand cursor on rollover + * @property buttonMode + * @type Boolean + */ + this.buttonMode = false; + + /* + * MOUSE Callbacks + */ + + /** + * A callback that is used when the users clicks on the displayObject with their mouse + * @method click + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user clicks the mouse down over the sprite + * @method mousedown + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject + * for this callback to be fired the mouse must have been pressed down over the displayObject + * @method mouseup + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the mouse that was over the displayObject but is no longer over the displayObject + * for this callback to be fired, The touch must have started over the displayObject + * @method mouseupoutside + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse rolls over the displayObject + * @method mouseover + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the users mouse leaves the displayObject + * @method mouseout + * @param interactionData {InteractionData} + */ + + + /* + * TOUCH Callbacks + */ + + /** + * A callback that is used when the users taps on the sprite with their finger + * basically a touch version of click + * @method tap + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user touch's over the displayObject + * @method touchstart + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases a touch over the displayObject + * @method touchend + * @param interactionData {InteractionData} + */ + + /** + * A callback that is used when the user releases the touch that was over the displayObject + * for this callback to be fired, The touch must have started over the sprite + * @method touchendoutside + * @param interactionData {InteractionData} + */ +} + +// constructor +PIXI.DisplayObject.constructor = PIXI.DisplayObject; + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObject.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + } +});*/ + +/** + * Indicates if the sprite will have touch and mouse interactivity. It is false by default + * @method setInteractive + * @param interactive {Boolean} + */ +PIXI.DisplayObject.prototype.setInteractive = function(interactive) +{ + this.interactive = interactive; + // TODO more to be done here.. + // need to sort out a re-crawl! + if(this.stage)this.stage.dirty = true; +} + + +/** + * @private + */ +PIXI.DisplayObject.prototype.updateTransform = function() +{ + // TODO OPTIMIZE THIS!! with dirty + if(this.rotation != this.rotationCache) + { + this.rotationCache = this.rotation; + this._sr = Math.sin(this.rotation); + this._cr = Math.cos(this.rotation); + } + + var localTransform = this.localTransform; + var parentTransform = this.parent.worldTransform; + var worldTransform = this.worldTransform; + //console.log(localTransform) + localTransform[0] = this._cr * this.scale.x; + localTransform[1] = -this._sr * this.scale.y + localTransform[3] = this._sr * this.scale.x; + localTransform[4] = this._cr * this.scale.y; + + ///AAARR GETTER SETTTER! + //localTransform[2] = this.position.x; + //localTransform[5] = this.position.y; + + var px = this.pivot.x; + var py = this.pivot.y; + + ///AAARR GETTER SETTTER! + localTransform[2] = this.position.x - localTransform[0] * px - py * localTransform[1]; + localTransform[5] = this.position.y - localTransform[4] * py - px * localTransform[3]; + + // Cache the matrix values (makes for huge speed increases!) + var a00 = localTransform[0], a01 = localTransform[1], a02 = localTransform[2], + a10 = localTransform[3], a11 = localTransform[4], a12 = localTransform[5], + + b00 = parentTransform[0], b01 = parentTransform[1], b02 = parentTransform[2], + b10 = parentTransform[3], b11 = parentTransform[4], b12 = parentTransform[5]; + + worldTransform[0] = b00 * a00 + b01 * a10; + worldTransform[1] = b00 * a01 + b01 * a11; + worldTransform[2] = b00 * a02 + b01 * a12 + b02; + + worldTransform[3] = b10 * a00 + b11 * a10; + worldTransform[4] = b10 * a01 + b11 * a11; + worldTransform[5] = b10 * a02 + b11 * a12 + b12; + + // because we are using affine transformation, we can optimise the matrix concatenation process.. wooo! + // mat3.multiply(this.localTransform, this.parent.worldTransform, this.worldTransform); + this.worldAlpha = this.alpha * this.parent.worldAlpha; + + +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * A DisplayObjectContainer represents a collection of display objects. It is the base class of all display objects that act as a container for other objects. + * @class DisplayObjectContainer + * @extends DisplayObject + * @constructor + */ +PIXI.DisplayObjectContainer = function() +{ + PIXI.DisplayObject.call( this ); + + /** + * [read-only] The of children of this container. + * @property children {Array} + */ + this.children = []; + //s + this.renderable = false; +} + +// constructor +PIXI.DisplayObjectContainer.constructor = PIXI.DisplayObjectContainer; +PIXI.DisplayObjectContainer.prototype = Object.create( PIXI.DisplayObject.prototype ); + +//TODO make visible a getter setter +/* +Object.defineProperty(PIXI.DisplayObjectContainer.prototype, 'visible', { + get: function() { + return this._visible; + }, + set: function(value) { + this._visible = value; + + } +});*/ + +/** + * Adds a child to the container. + * @method addChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.addChild = function(child) +{ + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + child.parent = this; + child.childIndex = this.children.length; + + this.children.push(child); + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } +} + +/** + * Adds a child to the container at a specified index. If the index is out of bounds an error will be thrown + * @method addChildAt + * @param DisplayObject {DisplayObject} + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.addChildAt = function(child, index) +{ + if(index >= 0 && index <= this.children.length) + { + if(child.parent != undefined) + { + child.parent.removeChild(child); + } + + if (index == this.children.length) + { + this.children.push(child); + } + else + { + this.children.splice(index, 0, child); + } + + child.parent = this; + child.childIndex = index; + + var length = this.children.length; + for (var i=index; i < length; i++) + { + this.children[i].childIndex = i; + } + + if(this.stage) + { + this.stage.__addChild(child); + } + + // need to remove any render groups.. + if(this.__renderGroup) + { + // being used by a renderTexture.. if it exists then it must be from a render texture; + if(child.__renderGroup)child.__renderGroup.removeDisplayObjectAndChildren(child); + // add them to the new render group.. + this.__renderGroup.addDisplayObjectAndChildren(child); + } + } + else + { + // error! + + throw new Error(child + " The index "+ index +" supplied is out of bounds " + this.children.length); + } +} + +/** + * Swaps the depth of 2 displayObjects + * @method swapChildren + * @param DisplayObject {DisplayObject} + * @param DisplayObject2 {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.swapChildren = function(child, child2) +{ + // TODO I already know this?? + var index = this.children.indexOf( child ); + var index2 = this.children.indexOf( child2 ); + + if ( index !== -1 && index2 !== -1 ) + { + // cool + if(this.stage) + { + // this is to satisfy the webGL batching.. + // TODO sure there is a nicer way to achieve this! + this.stage.__removeChild(child); + this.stage.__removeChild(child2); + + this.stage.__addChild(child); + this.stage.__addChild(child2); + } + + // swap the indexes.. + child.childIndex = index2; + child2.childIndex = index; + // swap the positions.. + this.children[index] = child2; + this.children[index2] = child; + + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + } +} + +/** + * Returns the Child at the specified index + * @method getChildAt + * @param index {Number} + */ +PIXI.DisplayObjectContainer.prototype.getChildAt = function(index) +{ + if(index >= 0 && index < this.children.length) + { + return this.children[index]; + } + else + { + throw new Error(child + " Both the supplied DisplayObjects must be a child of the caller " + this); + + } +} + +/** + * Removes a child from the container. + * @method removeChild + * @param DisplayObject {DisplayObject} + */ +PIXI.DisplayObjectContainer.prototype.removeChild = function(child) +{ + var index = this.children.indexOf( child ); + + if ( index !== -1 ) + { + if(this.stage) + { + this.stage.__removeChild(child); + } + + // webGL trim + if(child.__renderGroup) + { + child.__renderGroup.removeDisplayObjectAndChildren(child); + } + + // console.log(">" + child.__renderGroup) + child.parent = undefined; + + this.children.splice( index, 1 ); + + // update in dexs! + for(var i=index,j=this.children.length; i= this.textures.length) + { + this.gotoAndStop(this.textures.length - 1); + if(this.onComplete) + { + this.onComplete(); + } + } +} +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text to split a line you can use "\n" + * @class Text + * @extends Sprite + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} [style] The style parameters + * @param {String} [style.font] default "bold 20pt Arial" The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text = function(text, style) +{ + this.canvas = document.createElement("canvas"); + this.context = this.canvas.getContext("2d"); + PIXI.Sprite.call(this, PIXI.Texture.fromCanvas(this.canvas)); + + this.setText(text); + this.setStyle(style); + + this.updateText(); + this.dirty = false; +}; + +// constructor +PIXI.Text.constructor = PIXI.Text; +PIXI.Text.prototype = Object.create(PIXI.Sprite.prototype); + +/** + * Set the style of the text + * @method setStyle + * @param {Object} [style] The style parameters + * @param {String} [style.font="bold 20pt Arial"] The style and size of the font + * @param {Object} [style.fill="black"] A canvas fillstyle that will be used on the text eg "red", "#00FF00" + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + * @param {String} [style.stroke] A canvas fillstyle that will be used on the text stroke eg "blue", "#FCFF00" + * @param {Number} [style.strokeThickness=0] A number that represents the thickness of the stroke. Default is 0 (no stroke) + * @param {Boolean} [style.wordWrap=false] Indicates if word wrap should be used + * @param {Number} [style.wordWrapWidth=100] The width at which text will wrap + */ +PIXI.Text.prototype.setStyle = function(style) +{ + style = style || {}; + style.font = style.font || "bold 20pt Arial"; + style.fill = style.fill || "black"; + style.align = style.align || "left"; + style.strokeThickness = style.strokeThickness || 0; + style.wordWrap = style.wordWrap || false; + style.wordWrapWidth = style.wordWrapWidth || 100; + this.style = style; + this.dirty = true; +}; + +/** + * Set the copy for the text object. To split a line you can use "\n" + * @methos setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.Sprite.prototype.setText = function(text) +{ + this.text = text.toString() || " "; + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.Text.prototype.updateText = function() +{ + this.context.font = this.style.font; + + var outputText = this.text; + + // word wrap + // preserve original text + if(this.style.wordWrap)outputText = this.wordWrap(this.text); + + //split text into lines + var lines = outputText.split(/(?:\r\n|\r|\n)/); + + //calculate text width + var lineWidths = []; + var maxLineWidth = 0; + for (var i = 0; i < lines.length; i++) + { + var lineWidth = this.context.measureText(lines[i]).width; + lineWidths[i] = lineWidth; + maxLineWidth = Math.max(maxLineWidth, lineWidth); + } + this.canvas.width = maxLineWidth + this.style.strokeThickness; + + //calculate text height + var lineHeight = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness; + this.canvas.height = lineHeight * lines.length; + + //set canvas text styles + this.context.fillStyle = this.style.fill; + this.context.font = this.style.font; + + this.context.strokeStyle = this.style.stroke; + this.context.lineWidth = this.style.strokeThickness; + + this.context.textBaseline = "top"; + + //draw lines line by line + for (i = 0; i < lines.length; i++) + { + var linePosition = new PIXI.Point(this.style.strokeThickness / 2, this.style.strokeThickness / 2 + i * lineHeight); + + if(this.style.align == "right") + { + linePosition.x += maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + linePosition.x += (maxLineWidth - lineWidths[i]) / 2; + } + + if(this.style.stroke && this.style.strokeThickness) + { + this.context.strokeText(lines[i], linePosition.x, linePosition.y); + } + + if(this.style.fill) + { + this.context.fillText(lines[i], linePosition.x, linePosition.y); + } + } + + this.updateTexture(); +}; + +/** + * Updates texture size based on canvas size + * @private + */ +PIXI.Text.prototype.updateTexture = function() +{ + + this.texture.baseTexture.width = this.canvas.width; + this.texture.baseTexture.height = this.canvas.height; + this.texture.frame.width = this.canvas.width; + this.texture.frame.height = this.canvas.height; + + this._width = this.canvas.width; + this._height = this.canvas.height; + + PIXI.texturesToUpdate.push(this.texture.baseTexture); +}; + +/** + * @private + */ +PIXI.Text.prototype.updateTransform = function() +{ + if(this.dirty) + { + this.updateText(); + this.dirty = false; + } + + PIXI.Sprite.prototype.updateTransform.call(this); +}; + +/* + * http://stackoverflow.com/users/34441/ellisbben + * great solution to the problem! + */ +PIXI.Text.prototype.determineFontHeight = function(fontStyle) +{ + // build a little reference dictionary so if the font style has been used return a + // cached version... + var result = PIXI.Text.heightCache[fontStyle]; + + if(!result) + { + var body = document.getElementsByTagName("body")[0]; + var dummy = document.createElement("div"); + var dummyText = document.createTextNode("M"); + dummy.appendChild(dummyText); + dummy.setAttribute("style", fontStyle); + body.appendChild(dummy); + + result = dummy.offsetHeight; + PIXI.Text.heightCache[fontStyle] = result; + + body.removeChild(dummy); + } + + return result; +}; + +/** + * A Text Object will apply wordwrap + * @private + */ +PIXI.Text.prototype.wordWrap = function(text) +{ + // search good wrap position + var searchWrapPos = function(ctx, text, start, end, wrapWidth) + { + var p = Math.floor((end-start) / 2) + start; + if(p == start) { + return 1; + } + + if(ctx.measureText(text.substring(0,p)).width <= wrapWidth) + { + if(ctx.measureText(text.substring(0,p+1)).width > wrapWidth) + { + return p; + } + else + { + return arguments.callee(ctx, text, p, end, wrapWidth); + } + } + else + { + return arguments.callee(ctx, text, start, p, wrapWidth); + } + }; + + var lineWrap = function(ctx, text, wrapWidth) + { + if(ctx.measureText(text).width <= wrapWidth || text.length < 1) + { + return text; + } + var pos = searchWrapPos(ctx, text, 0, text.length, wrapWidth); + return text.substring(0, pos) + "\n" + arguments.callee(ctx, text.substring(pos), wrapWidth); + }; + + var result = ""; + var lines = text.split("\n"); + for (var i = 0; i < lines.length; i++) + { + result += lineWrap(this.context, lines[i], this.style.wordWrapWidth) + "\n"; + } + + return result; +}; + +PIXI.Text.prototype.destroy = function(destroyTexture) +{ + if(destroyTexture) + { + this.texture.destroy(); + } + +}; + +PIXI.Text.heightCache = {}; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A Text Object will create a line(s) of text using bitmap font. To split a line you can use "\n", "\r" or "\r\n" + * You can generate the fnt files using + * http://www.angelcode.com/products/bmfont/ for windows or + * http://www.bmglyph.com/ for mac. + * @class BitmapText + * @extends DisplayObjectContainer + * @constructor + * @param {String} text The copy that you would like the text to display + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText = function(text, style) +{ + PIXI.DisplayObjectContainer.call(this); + + this.setText(text); + this.setStyle(style); + this.updateText(); + this.dirty = false + +}; + +// constructor +PIXI.BitmapText.constructor = PIXI.BitmapText; +PIXI.BitmapText.prototype = Object.create(PIXI.DisplayObjectContainer.prototype); + +/** + * Set the copy for the text object + * @method setText + * @param {String} text The copy that you would like the text to display + */ +PIXI.BitmapText.prototype.setText = function(text) +{ + this.text = text || " "; + this.dirty = true; +}; + +/** + * Set the style of the text + * @method setStyle + * @param {Object} style The style parameters + * @param {String} style.font The size (optional) and bitmap font id (required) eq "Arial" or "20px Arial" (must have loaded previously) + * @param {String} [style.align="left"] An alignment of the multiline text ("left", "center" or "right") + */ +PIXI.BitmapText.prototype.setStyle = function(style) +{ + style = style || {}; + style.align = style.align || "left"; + this.style = style; + + var font = style.font.split(" "); + this.fontName = font[font.length - 1]; + this.fontSize = font.length >= 2 ? parseInt(font[font.length - 2], 10) : PIXI.BitmapText.fonts[this.fontName].size; + + this.dirty = true; +}; + +/** + * Renders text + * @private + */ +PIXI.BitmapText.prototype.updateText = function() +{ + var data = PIXI.BitmapText.fonts[this.fontName]; + var pos = new PIXI.Point(); + var prevCharCode = null; + var chars = []; + var maxLineWidth = 0; + var lineWidths = []; + var line = 0; + var scale = this.fontSize / data.size; + for(var i = 0; i < this.text.length; i++) + { + var charCode = this.text.charCodeAt(i); + if(/(?:\r\n|\r|\n)/.test(this.text.charAt(i))) + { + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + line++; + + pos.x = 0; + pos.y += data.lineHeight; + prevCharCode = null; + continue; + } + + var charData = data.chars[charCode]; + if(!charData) continue; + + if(prevCharCode && charData[prevCharCode]) + { + pos.x += charData.kerning[prevCharCode]; + } + chars.push({texture:charData.texture, line: line, charCode: charCode, position: new PIXI.Point(pos.x + charData.xOffset, pos.y + charData.yOffset)}); + pos.x += charData.xAdvance; + + prevCharCode = charCode; + } + + lineWidths.push(pos.x); + maxLineWidth = Math.max(maxLineWidth, pos.x); + + var lineAlignOffsets = []; + for(i = 0; i <= line; i++) + { + var alignOffset = 0; + if(this.style.align == "right") + { + alignOffset = maxLineWidth - lineWidths[i]; + } + else if(this.style.align == "center") + { + alignOffset = (maxLineWidth - lineWidths[i]) / 2; + } + lineAlignOffsets.push(alignOffset); + } + + for(i = 0; i < chars.length; i++) + { + var char = new PIXI.Sprite(chars[i].texture)//PIXI.Sprite.fromFrame(chars[i].charCode); + char.position.x = (chars[i].position.x + lineAlignOffsets[chars[i].line]) * scale; + char.position.y = chars[i].position.y * scale; + char.scale.x = char.scale.y = scale; + this.addChild(char); + } + + this.width = pos.x * scale; + this.height = (pos.y + data.lineHeight) * scale; +}; + +/** + * @private + */ +PIXI.BitmapText.prototype.updateTransform = function() +{ + if(this.dirty) + { + while(this.children.length > 0) + { + this.removeChild(this.getChildAt(0)); + } + this.updateText(); + + this.dirty = false; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +}; + +PIXI.BitmapText.fonts = {}; +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + +/** +The interaction manager deals with mouse and touch events. Any DisplayObject can be interactive +This manager also supports multitouch. +@class InteractionManager +@constructor +@param stage {Stage} +@type Stage +*/ +PIXI.InteractionManager = function(stage) +{ + /** + * a refference to the stage + * @property stage + * @type Stage + */ + this.stage = stage; + + // helpers + this.tempPoint = new PIXI.Point(); + //this.tempMatrix = mat3.create(); + + this.mouseoverEnabled = true; + + /** + * the mouse data + * @property mouse + * @type InteractionData + */ + this.mouse = new PIXI.InteractionData(); + + /** + * an object that stores current touches (InteractionData) by id reference + * @property touchs + * @type Object + */ + this.touchs = {}; + + //tiny little interactiveData pool! + this.pool = []; + + this.interactiveItems = []; + + this.last = 0; +} + +// constructor +PIXI.InteractionManager.constructor = PIXI.InteractionManager; + +PIXI.InteractionManager.prototype.collectInteractiveSprite = function(displayObject, iParent) +{ + var children = displayObject.children; + var length = children.length; + + //this.interactiveItems = []; + /// make an interaction tree... {item.__interactiveParent} + for (var i = length-1; i >= 0; i--) + { + var child = children[i]; + + // push all interactive bits + if(child.interactive) + { + iParent.interactiveChildren = true; + //child.__iParent = iParent; + this.interactiveItems.push(child); + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, child); + } + } + else + { + child.__iParent = null; + + if(child.children.length > 0) + { + this.collectInteractiveSprite(child, iParent); + } + } + } +} + +PIXI.InteractionManager.prototype.setTarget = function(target) +{ + if (window.navigator.msPointerEnabled) + { + // time to remove some of that zoom in ja.. + target.view.style["-ms-content-zooming"] = "none"; + target.view.style["-ms-touch-action"] = "none" + + // DO some window specific touch! + } + + this.target = target; + target.view.addEventListener('mousemove', this.onMouseMove.bind(this), true); + target.view.addEventListener('mousedown', this.onMouseDown.bind(this), true); + document.body.addEventListener('mouseup', this.onMouseUp.bind(this), true); + target.view.addEventListener('mouseout', this.onMouseUp.bind(this), true); + + // aint no multi touch just yet! + target.view.addEventListener("touchstart", this.onTouchStart.bind(this), true); + target.view.addEventListener("touchend", this.onTouchEnd.bind(this), true); + target.view.addEventListener("touchmove", this.onTouchMove.bind(this), true); +} + +PIXI.InteractionManager.prototype.update = function() +{ + if(!this.target)return; + + // frequency of 30fps?? + var now = Date.now(); + var diff = now - this.last; + diff = (diff * 30) / 1000; + if(diff < 1)return; + this.last = now; + // + + // ok.. so mouse events?? + // yes for now :) + // OPTIMSE - how often to check?? + if(this.dirty) + { + this.dirty = false; + + var len = this.interactiveItems.length; + + for (var i=0; i < this.interactiveItems.length; i++) { + this.interactiveItems[i].interactiveChildren = false; + } + + this.interactiveItems = []; + + if(this.stage.interactive)this.interactiveItems.push(this.stage); + // go through and collect all the objects that are interactive.. + this.collectInteractiveSprite(this.stage, this.stage); + } + + // loop through interactive objects! + var length = this.interactiveItems.length; + + this.target.view.style.cursor = "default"; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(!item.visible)continue; + + // OPTIMISATION - only calculate every time if the mousemove function exists.. + // OK so.. does the object have any other interactive functions? + // hit-test the clip! + + + if(item.mouseover || item.mouseout || item.buttonMode) + { + // ok so there are some functions so lets hit test it.. + item.__hit = this.hitTest(item, this.mouse); + // ok so deal with interactions.. + // loks like there was a hit! + if(item.__hit) + { + if(item.buttonMode)this.target.view.style.cursor = "pointer"; + + if(!item.__isOver) + { + + if(item.mouseover)item.mouseover(this.mouse); + item.__isOver = true; + } + } + else + { + if(item.__isOver) + { + // roll out! + if(item.mouseout)item.mouseout(this.mouse); + item.__isOver = false; + } + } + } + + // ---> + } +} + +PIXI.InteractionManager.prototype.onMouseMove = function(event) +{ + event.preventDefault(); + + // TODO optimize by not check EVERY TIME! maybe half as often? // + var rect = this.target.view.getBoundingClientRect(); + + this.mouse.global.x = (event.clientX - rect.left) * (this.target.width / rect.width); + this.mouse.global.y = (event.clientY - rect.top) * ( this.target.height / rect.height); + + var length = this.interactiveItems.length; + var global = this.mouse.global; + + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousemove) + { + //call the function! + item.mousemove(this.mouse); + } + } +} + +PIXI.InteractionManager.prototype.onMouseDown = function(event) +{ + event.preventDefault(); + + // loop through inteaction tree... + // hit test each item! -> + // get interactive items under point?? + //stage.__i + var length = this.interactiveItems.length; + var global = this.mouse.global; + + var index = 0; + var parent = this.stage; + + // while + // hit test + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mousedown || item.click) + { + item.__mouseIsDown = true; + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit) + { + //call the function! + if(item.mousedown)item.mousedown(this.mouse); + item.__isDown = true; + + // just the one! + if(!item.interactiveChildren)break; + } + } + } +} + +PIXI.InteractionManager.prototype.onMouseUp = function(event) +{ + event.preventDefault(); + var global = this.mouse.global; + + + var length = this.interactiveItems.length; + var up = false; + + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + + if(item.mouseup || item.mouseupoutside || item.click) + { + item.__hit = this.hitTest(item, this.mouse); + + if(item.__hit && !up) + { + //call the function! + if(item.mouseup) + { + item.mouseup(this.mouse); + } + if(item.__isDown) + { + if(item.click)item.click(this.mouse); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.mouseupoutside)item.mouseupoutside(this.mouse); + } + } + + item.__isDown = false; + } + } +} + +PIXI.InteractionManager.prototype.hitTest = function(item, interactionData) +{ + var global = interactionData.global; + + if(!item.visible)return false; + + if(item instanceof PIXI.Sprite) + { + var worldTransform = item.worldTransform; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var width = item.texture.frame.width; + var height = item.texture.frame.height; + + var x1 = -width * item.anchor.x; + + if(x > x1 && x < x1 + width) + { + var y1 = -height * item.anchor.y; + + if(y > y1 && y < y1 + height) + { + // set the target property if a hit is true! + interactionData.target = item + return true; + } + } + } + else if(item.hitArea) + { + var worldTransform = item.worldTransform; + var hitArea = item.hitArea; + + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + + var x = a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id; + var y = a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id; + + var x1 = hitArea.x; + if(x > x1 && x < x1 + hitArea.width) + { + var y1 = hitArea.y; + + if(y > y1 && y < y1 + hitArea.height) + { + return true; + } + } + } + + var length = item.children.length; + + for (var i = 0; i < length; i++) + { + var tempItem = item.children[i]; + var hit = this.hitTest(tempItem, interactionData); + if(hit)return true; + } + + return false; +} + + + +PIXI.InteractionManager.prototype.onTouchMove = function(event) +{ + event.preventDefault(); + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + + // update the touch position + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + } + + var length = this.interactiveItems.length; + for (var i = 0; i < length; i++) + { + var item = this.interactiveItems[i]; + if(item.touchmove)item.touchmove(touchData); + } +} + +PIXI.InteractionManager.prototype.onTouchStart = function(event) +{ + event.preventDefault(); + var rect = this.target.view.getBoundingClientRect(); + + var changedTouches = event.changedTouches; + for (var i=0; i < changedTouches.length; i++) + { + var touchEvent = changedTouches[i]; + + var touchData = this.pool.pop(); + if(!touchData)touchData = new PIXI.InteractionData(); + + this.touchs[touchEvent.identifier] = touchData; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + + if(item.touchstart || item.tap) + { + item.__hit = this.hitTest(item, touchData); + + if(item.__hit) + { + //call the function! + if(item.touchstart)item.touchstart(touchData); + item.__isDown = true; + item.__touchData = touchData; + + if(!item.interactiveChildren)break; + } + } + } + } + +} + +PIXI.InteractionManager.prototype.onTouchEnd = function(event) +{ + event.preventDefault(); + + + var rect = this.target.view.getBoundingClientRect(); + var changedTouches = event.changedTouches; + + for (var i=0; i < changedTouches.length; i++) + { + + var touchEvent = changedTouches[i]; + var touchData = this.touchs[touchEvent.identifier]; + var up = false; + touchData.global.x = (touchEvent.clientX - rect.left) * (this.target.width / rect.width); + touchData.global.y = (touchEvent.clientY - rect.top) * (this.target.height / rect.height); + + var length = this.interactiveItems.length; + for (var j = 0; j < length; j++) + { + var item = this.interactiveItems[j]; + var itemTouchData = item.__touchData; // <-- Here! + item.__hit = this.hitTest(item, touchData); + + if(itemTouchData == touchData) + { + // so this one WAS down... + + // hitTest?? + + if(item.touchend || item.tap) + { + if(item.__hit && !up) + { + if(item.touchend)item.touchend(touchData); + if(item.__isDown) + { + if(item.tap)item.tap(touchData); + } + + if(!item.interactiveChildren)up = true; + } + else + { + if(item.__isDown) + { + if(item.touchendoutside)item.touchendoutside(touchData); + } + } + + item.__isDown = false; + } + + item.__touchData = null; + + } + else + { + + } + } + // remove the touch.. + this.pool.push(touchData); + this.touchs[touchEvent.identifier] = null; + } +} + +/** +@class InteractionData +@constructor +*/ +PIXI.InteractionData = function() +{ + /** + * This point stores the global coords of where the touch/mouse event happened + * @property global + * @type Point + */ + this.global = new PIXI.Point(); + + // this is here for legacy... but will remove + this.local = new PIXI.Point(); + + /** + * The target Sprite that was interacted with + * @property target + * @type Sprite + */ + this.target; +} + +/** + * This will return the local coords of the specified displayObject for this InteractionData + * @method getLocalPosition + * @param displayObject {DisplayObject} The DisplayObject that you would like the local coords off + * @return {Point} A point containing the coords of the InteractionData position relative to the DisplayObject + */ +PIXI.InteractionData.prototype.getLocalPosition = function(displayObject) +{ + var worldTransform = displayObject.worldTransform; + var global = this.global; + + // do a cheeky transform to get the mouse coords; + var a00 = worldTransform[0], a01 = worldTransform[1], a02 = worldTransform[2], + a10 = worldTransform[3], a11 = worldTransform[4], a12 = worldTransform[5], + id = 1 / (a00 * a11 + a01 * -a10); + // set the mouse coords... + return new PIXI.Point(a11 * id * global.x + -a01 * id * global.y + (a12 * a01 - a02 * a11) * id, + a00 * id * global.y + -a10 * id * global.x + (-a12 * a00 + a02 * a10) * id) +} + +// constructor +PIXI.InteractionData.constructor = PIXI.InteractionData; + + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** +A Stage represents the root of the display tree. Everything connected to the stage is rendered +@class Stage +@extends DisplayObjectContainer +@constructor +@param backgroundColor {Number} the background color of the stage +@param interactive {Boolean} enable / disable interaction (default is false) +*/ +PIXI.Stage = function(backgroundColor, interactive) +{ + + PIXI.DisplayObjectContainer.call( this ); + this.worldTransform = PIXI.mat3.create() + this.__childrenAdded = []; + this.__childrenRemoved = []; + this.childIndex = 0; + this.stage= this; + + this.stage.hitArea = new PIXI.Rectangle(0,0,100000, 100000); + + // interaction! + this.interactive = !!interactive; + this.interactionManager = new PIXI.InteractionManager(this); + + this.setBackgroundColor(backgroundColor); + this.worldVisible = true; + + this.stage.dirty = true; +} + +// constructor +PIXI.Stage.constructor = PIXI.Stage; + +PIXI.Stage.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +/** +@method updateTransform +@internal +*/ +PIXI.Stage.prototype.updateTransform = function() +{ + this.worldAlpha = 1; + + for(var i=0,j=this.children.length; i> 16 & 0xFF) / 255, ( hex >> 8 & 0xFF) / 255, (hex & 0xFF)/ 255]; +} + +/** + * Provides bind in a cross browser way. + */ +if (typeof Function.prototype.bind != 'function') { + Function.prototype.bind = (function () { + var slice = Array.prototype.slice; + return function (thisArg) { + var target = this, boundArgs = slice.call(arguments, 1); + + if (typeof target != 'function') throw new TypeError(); + + function bound() { + var args = boundArgs.concat(slice.call(arguments)); + target.apply(this instanceof bound ? this : thisArg, args); + } + + bound.prototype = (function F(proto) { + proto && (F.prototype = proto); + if (!(this instanceof F)) return new F; + })(target.prototype); + + return bound; + }; + })(); +} + +var AjaxRequest = function() +{ + var activexmodes = ["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"] //activeX versions to check for in IE + + if (window.ActiveXObject) + { //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + for (var i=0; i 0) + { + for (var i=0; i < PIXI.Texture.frameUpdates.length; i++) + { + PIXI.Texture.frameUpdates[i].updateFrame = false; + }; + + PIXI.Texture.frameUpdates = []; + } +} + +/** + * @private + */ + +PIXI.WebGLRenderer.updateTextures = function() +{ + for (var i=0; i < PIXI.texturesToUpdate.length; i++) this.updateTexture(PIXI.texturesToUpdate[i]); + for (var i=0; i < PIXI.texturesToDestroy.length; i++) this.destroyTexture(PIXI.texturesToDestroy[i]); + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; +} + +PIXI.WebGLRenderer.updateTexture = function(texture) +{ + var gl = PIXI.gl; + + if(!texture._glTexture) + { + texture._glTexture = gl.createTexture(); + } + + if(texture.hasLoaded) + { + gl.bindTexture(gl.TEXTURE_2D, texture._glTexture); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, true); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, texture.source); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + + // reguler... + + if(!texture._powerOf2) + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + } + else + { + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + } + + gl.bindTexture(gl.TEXTURE_2D, null); + } + +} + +PIXI.WebGLRenderer.prototype.destroyTexture = function(texture) +{ + var gl = this.gl; + + if(texture._glTexture) + { + texture._glTexture = gl.createTexture(); + gl.deleteTexture(gl.TEXTURE_2D, texture._glTexture); + } +} + +/** + * resizes the webGL view to the specified width and height + * @method resize + * @param width {Number} the new width of the webGL view + * @param height {Number} the new height of the webGL view + */ +PIXI.WebGLRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; + + this.gl.viewport(0, 0, this.width, this.height); + + var projectionMatrix = this.projectionMatrix; + + projectionMatrix[0] = 2/this.width; + projectionMatrix[5] = -2/this.height; + projectionMatrix[12] = -1; + projectionMatrix[13] = 1; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextLost = function(event) +{ + event.preventDefault(); + this.contextLost = true; +} + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.handleContextRestored = function(event) +{ + this.gl = this.view.getContext("experimental-webgl", { + alpha: true + }); + + this.initShaders(); + + for (var i=0; i < PIXI.TextureCache.length; i++) + { + this.updateTexture(PIXI.TextureCache[i]); + }; + + for (var i=0; i < this.batchs.length; i++) + { + this.batchs[i].restoreLostContext(this.gl)// + this.batchs[i].dirty = true; + }; + + PIXI._restoreBatchs(this.gl); + + this.contextLost = false; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI._batchs = []; + +/** + * @private + */ +PIXI._getBatch = function(gl) +{ + if(PIXI._batchs.length == 0) + { + return new PIXI.WebGLBatch(gl); + } + else + { + return PIXI._batchs.pop(); + } +} + +/** + * @private + */ +PIXI._returnBatch = function(batch) +{ + batch.clean(); + PIXI._batchs.push(batch); +} + +/** + * @private + */ +PIXI._restoreBatchs = function(gl) +{ + for (var i=0; i < PIXI._batchs.length; i++) + { + PIXI._batchs[i].restoreLostContext(gl); + }; +} + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLBatch = function(gl) +{ + this.gl = gl; + + this.size = 0; + + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); + this.blendMode = PIXI.blendModes.NORMAL; + this.dynamicSize = 1; +} + + +// constructor +PIXI.WebGLBatch.constructor = PIXI.WebGLBatch; + +/** + * Cleans the batch so that is can be returned to an object pool and reused + */ +PIXI.WebGLBatch.prototype.clean = function() +{ + this.verticies = []; + this.uvs = []; + this.indices = []; + this.colors = []; + //this.sprites = []; + this.dynamicSize = 1; + this.texture = null; + this.last = null; + this.size = 0; + + this.head; + this.tail; +} + +/* + * recreates the buffers in the event of a context loss + */ +PIXI.WebGLBatch.prototype.restoreLostContext = function(gl) +{ + this.gl = gl; + this.vertexBuffer = gl.createBuffer(); + this.indexBuffer = gl.createBuffer(); + this.uvBuffer = gl.createBuffer(); + this.colorBuffer = gl.createBuffer(); +} + +/** + * inits the batch's texture and blend mode based if the supplied sprite + * @method init + * @param sprite {Sprite} the first sprite to be added to the batch. Only sprites with the same base texture and blend mode will be allowed to be added to this batch + */ +PIXI.WebGLBatch.prototype.init = function(sprite) +{ + sprite.batch = this; + this.dirty = true; + this.blendMode = sprite.blendMode; + this.texture = sprite.texture.baseTexture; +// this.sprites.push(sprite); + this.head = sprite; + this.tail = sprite; + this.size = 1; + + this.growBatch(); +} + +/** + * inserts a sprite before the specified sprite + * @method insertBefore + * @param sprite {Sprite} the sprite to be added + * @param nextSprite {nextSprite} the first sprite will be inserted before this sprite + */ +PIXI.WebGLBatch.prototype.insertBefore = function(sprite, nextSprite) +{ + this.size++; + + sprite.batch = this; + this.dirty = true; + var tempPrev = nextSprite.__prev; + nextSprite.__prev = sprite; + sprite.__next = nextSprite; + + if(tempPrev) + { + sprite.__prev = tempPrev; + tempPrev.__next = sprite; + } + else + { + this.head = sprite; + //this.head.__prev = null + } +} + +/** + * inserts a sprite after the specified sprite + * @method insertAfter + * @param sprite {Sprite} the sprite to be added + * @param previousSprite {Sprite} the first sprite will be inserted after this sprite + */ +PIXI.WebGLBatch.prototype.insertAfter = function(sprite, previousSprite) +{ + this.size++; + + + sprite.batch = this; + this.dirty = true; + + var tempNext = previousSprite.__next; + previousSprite.__next = sprite; + sprite.__prev = previousSprite; + + if(tempNext) + { + sprite.__next = tempNext; + tempNext.__prev = sprite; + } + else + { + this.tail = sprite + } + +} + +/** + * removes a sprite from the batch + * @method remove + * @param sprite {Sprite} the sprite to be removed + */ +PIXI.WebGLBatch.prototype.remove = function(sprite) +{ + this.size--; + + if(this.size == 0) + { + sprite.batch = null; + sprite.__prev = null; + sprite.__next = null; + return; + } + + if(sprite.__prev) + { + sprite.__prev.__next = sprite.__next; + } + else + { + this.head = sprite.__next; + this.head.__prev = null; + } + + if(sprite.__next) + { + sprite.__next.__prev = sprite.__prev; + } + else + { + this.tail = sprite.__prev; + this.tail.__next = null + } + + sprite.batch = null; + sprite.__next = null; + sprite.__prev = null; + this.dirty = true; +} + +/** + * Splits the batch into two with the specified sprite being the start of the new batch. + * @method split + * @param sprite {Sprite} the sprite that indicates where the batch should be split + * @return {WebGLBatch} the new batch + */ +PIXI.WebGLBatch.prototype.split = function(sprite) +{ + + //console.log("Splitting batch :" + this.size) +// console.log(sprite) +// console.log("-------") + this.dirty = true; + + //var val = (this.tail == this.head) + //console.log(val + " SAME?"); + var batch = new PIXI.WebGLBatch(this.gl)//PIXI._getBatch(this.gl); + batch.init(sprite); + batch.texture = this.texture; + batch.tail = this.tail; + //console.log("id is " +batcheee.id) + + this.tail = sprite.__prev; + this.tail.__next = null; + + sprite.__prev = null; + // return a splite batch! + //sprite.__prev.__next = null; + //sprite.__prev = null; + + + // TODO this size is wrong! + // need to recalculate :/ problem with a linked list! + // unless it gets calculated in the "clean"? + + // need to loop through items as there is no way to know the length on a linked list :/ + var tempSize = 0; + while(sprite) + { + tempSize++; + sprite.batch = batch; + sprite = sprite.__next; + } + + batch.size = tempSize; + this.size -= tempSize; + + return batch; +} + +/** + * Merges two batchs together + * @method merge + * @param batch {WebGLBatch} the batch that will be merged + */ +PIXI.WebGLBatch.prototype.merge = function(batch) +{ + this.dirty = true; + + this.tail.__next = batch.head; + batch.head.__prev = this.tail; + + this.size += batch.size; + + this.tail = batch.tail; + + var sprite = batch.head; + while(sprite) + { + sprite.batch = this; + sprite = sprite.__next; + } + +} + +/** + * Grows the size of the batch. As the elements in the batch cannot have a dynamic size this function is used to increase the size of the batch. It also creates a little extra room so that the batch does not need to be resized every time a sprite is added + * @methos growBatch + */ +PIXI.WebGLBatch.prototype.growBatch = function() +{ + var gl = this.gl; + if( this.size == 1) + { + this.dynamicSize = 1; + } + else + { + this.dynamicSize = this.size * 1.5 + } + // grow verts + this.verticies = new Float32Array(this.dynamicSize * 8); + + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER,this.verticies , gl.DYNAMIC_DRAW); + + this.uvs = new Float32Array( this.dynamicSize * 8 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.uvs , gl.DYNAMIC_DRAW); + + this.dirtyUVS = true; + + this.colors = new Float32Array( this.dynamicSize * 4 ) + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, this.colors , gl.DYNAMIC_DRAW); + + this.dirtyColors = true; + + this.indices = new Uint16Array(this.dynamicSize * 6); + var length = this.indices.length/6; + + for (var i=0; i < length; i++) + { + var index2 = i * 6; + var index3 = i * 4; + this.indices[index2 + 0] = index3 + 0; + this.indices[index2 + 1] = index3 + 1; + this.indices[index2 + 2] = index3 + 2; + this.indices[index2 + 3] = index3 + 0; + this.indices[index2 + 4] = index3 + 2; + this.indices[index2 + 5] = index3 + 3; + }; + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, this.indices, gl.STATIC_DRAW); + +} + +/** + * Refresh's all the data in the batch and sync's it with the webGL buffers + * @method refresh + */ +PIXI.WebGLBatch.prototype.refresh = function() +{ + var gl = this.gl; + + if (this.dynamicSize < this.size) + { + this.growBatch(); + } + + var indexRun = 0; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index + var a, b, c, d, tx, ty + + var displayObject = this.head + + while(displayObject) + { + index = indexRun * 8; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + + colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + + displayObject = displayObject.__next; + + indexRun ++; + } + + this.dirtyUVS = true; + this.dirtyColors = true; +} + +/** + * Updates all the relevant geometry and uploads the data to the GPU + * @method update + */ +PIXI.WebGLBatch.prototype.update = function() +{ + var gl = this.gl; + var worldTransform, width, height, aX, aY, w0, w1, h0, h1, index, index2, index3 + + var a, b, c, d, tx, ty; + + var indexRun = 0; + + var displayObject = this.head; + + while(displayObject) + { + if(displayObject.worldVisible) + { + width = displayObject.texture.frame.width; + height = displayObject.texture.frame.height; + + // TODO trim?? + aX = displayObject.anchor.x;// - displayObject.texture.trim.x + aY = displayObject.anchor.y; //- displayObject.texture.trim.y + w0 = width * (1-aX); + w1 = width * -aX; + + h0 = height * (1-aY); + h1 = height * -aY; + + index = indexRun * 8; + + worldTransform = displayObject.worldTransform; + + a = worldTransform[0]; + b = worldTransform[3]; + c = worldTransform[1]; + d = worldTransform[4]; + tx = worldTransform[2]; + ty = worldTransform[5]; + + this.verticies[index + 0 ] = a * w1 + c * h1 + tx; + this.verticies[index + 1 ] = d * h1 + b * w1 + ty; + + this.verticies[index + 2 ] = a * w0 + c * h1 + tx; + this.verticies[index + 3 ] = d * h1 + b * w0 + ty; + + this.verticies[index + 4 ] = a * w0 + c * h0 + tx; + this.verticies[index + 5 ] = d * h0 + b * w0 + ty; + + this.verticies[index + 6] = a * w1 + c * h0 + tx; + this.verticies[index + 7] = d * h0 + b * w1 + ty; + + + if(displayObject.updateFrame || displayObject.texture.updateFrame) + { + this.dirtyUVS = true; + + var texture = displayObject.texture; + + var frame = texture.frame; + var tw = texture.baseTexture.width; + var th = texture.baseTexture.height; + + this.uvs[index + 0] = frame.x / tw; + this.uvs[index +1] = frame.y / th; + + this.uvs[index +2] = (frame.x + frame.width) / tw; + this.uvs[index +3] = frame.y / th; + + this.uvs[index +4] = (frame.x + frame.width) / tw; + this.uvs[index +5] = (frame.y + frame.height) / th; + + this.uvs[index +6] = frame.x / tw; + this.uvs[index +7] = (frame.y + frame.height) / th; + + displayObject.updateFrame = false; + } + + // TODO this probably could do with some optimisation.... + if(displayObject.cacheAlpha != displayObject.worldAlpha) + { + displayObject.cacheAlpha = displayObject.worldAlpha; + + var colorIndex = indexRun * 4; + this.colors[colorIndex] = this.colors[colorIndex + 1] = this.colors[colorIndex + 2] = this.colors[colorIndex + 3] = displayObject.worldAlpha; + this.dirtyColors = true; + } + } + else + { + index = indexRun * 8; + + this.verticies[index + 0 ] = 0; + this.verticies[index + 1 ] = 0; + + this.verticies[index + 2 ] = 0; + this.verticies[index + 3 ] = 0; + + this.verticies[index + 4 ] = 0; + this.verticies[index + 5 ] = 0; + + this.verticies[index + 6] = 0; + this.verticies[index + 7] = 0; + } + + indexRun++; + displayObject = displayObject.__next; + } +} + +/** + * Draws the batch to the frame buffer + * @method render + */ +PIXI.WebGLBatch.prototype.render = function(start, end) +{ +// console.log(start + " :: " + end + " : " + this.size); + start = start || 0; + //end = end || this.size; + if(end == undefined)end = this.size; + + if(this.dirty) + { + this.refresh(); + this.dirty = false; + + } + + if (this.size == 0)return; + + this.update(); + var gl = this.gl; + + //TODO optimize this! + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + + var shaderProgram = PIXI.shaderProgram; + gl.useProgram(shaderProgram); + + // update the verts.. + gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer); + // ok.. + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, this.uvBuffer); + + if(this.dirtyUVS) + { + this.dirtyUVS = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.uvs); + } + + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, this.texture._glTexture); + + // update color! + gl.bindBuffer(gl.ARRAY_BUFFER, this.colorBuffer); + + if(this.dirtyColors) + { + this.dirtyColors = false; + gl.bufferSubData(gl.ARRAY_BUFFER, 0, this.colors); + } + + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer); + + + //var startIndex = 0//1; + var len = end - start; + // console.log(this.size) + // DRAW THAT this! + gl.drawElements(gl.TRIANGLES, len * 6, gl.UNSIGNED_SHORT, start * 2 * 6 ); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + + + +/** + * A WebGLBatch Enables a group of sprites to be drawn using the same settings. + * if a group of sprites all have the same baseTexture and blendMode then they can be grouped into a batch. All the sprites in a batch can then be drawn in one go by the GPU which is hugely efficient. ALL sprites in the webGL renderer are added to a batch even if the batch only contains one sprite. Batching is handled automatically by the webGL renderer. A good tip is: the smaller the number of batchs there are, the faster the webGL renderer will run. + * @class WebGLBatch + * @param an instance of the webGL context + * @return {PIXI.renderers.WebGLBatch} WebGLBatch {@link PIXI.renderers.WebGLBatch} + */ +PIXI.WebGLRenderGroup = function(gl) +{ + this.gl = gl; + this.root; + + this.backgroundColor; + this.batchs = []; + this.toRemove = []; +} + + +// constructor +PIXI.WebGLRenderGroup.constructor = PIXI.WebGLRenderGroup; + +PIXI.WebGLRenderGroup.prototype.setRenderable = function(displayObject) +{ + // has this changed?? + if(this.root)this.removeDisplayObjectAndChildren(this.root); + + displayObject.worldVisible = displayObject.visible; + + // soooooo // + // to check if any batchs exist already?? + + // TODO what if its already has an object? should remove it + this.root = displayObject; + //displayObject.__renderGroup = this; + this.addDisplayObjectAndChildren(displayObject); + //displayObject +} + +PIXI.WebGLRenderGroup.prototype.render = function(projectionMatrix) +{ + + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + + // set the flipped matrix.. + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + // TODO remove this by replacing visible with getter setters.. + this.checkVisibility(this.root, this.root.visible); + + // will render all the elements in the group + var renderable; + + + for (var i=0; i < this.batchs.length; i++) + { + renderable = this.batchs[i]; + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + } + +} + +PIXI.WebGLRenderGroup.prototype.renderSpecific = function(displayObject, projectionMatrix) +{ + PIXI.WebGLRenderer.updateTextures(); + + var gl = this.gl; + this.checkVisibility(displayObject, displayObject.visible); + gl.uniformMatrix4fv(PIXI.shaderProgram.mvMatrixUniform, false, projectionMatrix); + + + //console.log("SPECIFIC"); + // to do! + // render part of the scene... + + var startIndex; + var startBatchIndex; + + var endIndex; + var endBatchIndex; + + // get NEXT Renderable! + var nextRenderable = displayObject.renderable ? displayObject : this.getNextRenderable(displayObject); + var startBatch = nextRenderable.batch; + + if(nextRenderable instanceof PIXI.Sprite) + { + startBatch = nextRenderable.batch; + + var head = startBatch.head; + var next = head; + + // ok now we have the batch.. need to find the start index! + if(head == nextRenderable) + { + startIndex = 0; + } + else + { + startIndex = 1; + + while(head.__next != nextRenderable) + { + startIndex++; + head = head.__next; + } + } + } + else + { + startBatch = nextRenderable; + } + + // Get the LAST renderable object + var lastRenderable = displayObject; + var endBatch; + var lastItem = displayObject; + while(lastItem.children.length > 0) + { + lastItem = lastItem.children[lastItem.children.length-1]; + if(lastItem.renderable)lastRenderable = lastItem; + } + + if(lastRenderable instanceof PIXI.Sprite) + { + endBatch = lastRenderable.batch; + + var head = endBatch.head; + + if(head == lastRenderable) + { + endIndex = 0; + } + else + { + endIndex = 1; + + while(head.__next != lastRenderable) + { + endIndex++; + head = head.__next; + } + } + } + else + { + endBatch = lastRenderable; + } + + // TODO - need to fold this up a bit! + + + if(startBatch == endBatch) + { + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex, endIndex+1); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + return; + } + + // now we have first and last! + startBatchIndex = this.batchs.indexOf(startBatch); + endBatchIndex = this.batchs.indexOf(endBatch); + + // DO the first batch + if(startBatch instanceof PIXI.WebGLBatch) + { + startBatch.render(startIndex); + } + else if(startBatch instanceof PIXI.TilingSprite) + { + if(startBatch.visible)this.renderTilingSprite(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.Strip) + { + if(startBatch.visible)this.renderStrip(startBatch, projectionMatrix); + } + else if(startBatch instanceof PIXI.CustomRenderable) + { + if(startBatch.visible) startBatch.renderWebGL(this, projectionMatrix); + } + + // DO the middle batchs.. + for (var i=startBatchIndex+1; i < endBatchIndex; i++) + { + renderable = this.batchs[i]; + + if(renderable instanceof PIXI.WebGLBatch) + { + this.batchs[i].render(); + } + else if(renderable instanceof PIXI.TilingSprite) + { + if(renderable.visible)this.renderTilingSprite(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.Strip) + { + if(renderable.visible)this.renderStrip(renderable, projectionMatrix); + } + else if(renderable instanceof PIXI.CustomRenderable) + { + if(renderable.visible) renderable.renderWebGL(this, projectionMatrix); + } + + } + + // DO the last batch.. + if(endBatch instanceof PIXI.WebGLBatch) + { + endBatch.render(0, endIndex+1); + } + else if(endBatch instanceof PIXI.TilingSprite) + { + if(endBatch.visible)this.renderTilingSprite(endBatch); + } + else if(endBatch instanceof PIXI.Strip) + { + if(endBatch.visible)this.renderStrip(endBatch); + } + else if(endBatch instanceof PIXI.CustomRenderable) + { + if(endBatch.visible) endBatch.renderWebGL(this, projectionMatrix); + } +} + +PIXI.WebGLRenderGroup.prototype.checkVisibility = function(displayObject, globalVisible) +{ + // give the dp a refference to its renderGroup... + var children = displayObject.children; + //displayObject.worldVisible = globalVisible; + for (var i=0; i < children.length; i++) + { + var child = children[i]; + + // TODO optimize... shouldt need to loop through everything all the time + child.worldVisible = child.visible && globalVisible; + + // everything should have a batch! + // time to see whats new! + if(child.textureChange) + { + child.textureChange = false; + if(child.worldVisible) + { + this.removeDisplayObject(child); + this.addDisplayObject(child); + //this.updateTexture(child); + } + // update texture!! + } + + if(child.children.length > 0) + { + this.checkVisibility(child, child.worldVisible); + } + }; +} + +PIXI.WebGLRenderGroup.prototype.updateTexture = function(displayObject) +{ + // we know this exists.. + // is it in a batch.. + // check batch length + if(displayObject.batch.length == 1) + { + // just one! this guy! so simply swap the texture + displayObject.batch.texture = displayObject.texture.baseTexture; + return; + } + + // early out! + if(displayObject.batch.texture == displayObject.texture.baseTexture)return; + + + if(displayObject.batch.head == displayObject) + { + //console.log("HEAD") + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var previousBatch = this.batchs[index-1]; + currentBatch.remove(displayObject); + + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousBatch.tail); + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index-1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(0, 0, batch); + } + + } + else if(displayObject.batch.tail == displayObject) + { + var currentBatch = displayObject.batch; + + var index = this.batchs.indexOf( currentBatch ); + var nextBatch = this.batchs[index+1]; + currentBatch.remove(displayObject); + + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextBatch.head); + return; + } + else + { + // add it before.. + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch); + } + + } + else + { + // we are 0! + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + this.batchs.push(batch); + } + } + else + { + // console.log("MIDDLE") + var currentBatch = displayObject.batch; + + // split the batch into 2 + // AH! dont split on the current display object as the texture is wrong! + var splitBatch = currentBatch.split(displayObject); + + // now remove the display object + splitBatch.remove(displayObject); + + var batch = PIXI.WebGLRenderer.getBatch(); + var index = this.batchs.indexOf( currentBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + } +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObject = function(displayObject) +{ + // add a child to the render group.. + if(displayObject.__renderGroup)displayObject.__renderGroup.removeDisplayObjectAndChildren(displayObject); + + // DONT htink this is needed? + // displayObject.batch = null; + + displayObject.__renderGroup = this; + + //displayObject.cacheVisible = true; + if(!displayObject.renderable)return; + + // while looping below THE OBJECT MAY NOT HAVE BEEN ADDED + //displayObject.__inWebGL = true; + + var previousSprite = this.getPreviousRenderable(displayObject); + var nextSprite = this.getNextRenderable(displayObject); + + + /* + * so now we have the next renderable and the previous renderable + * + */ + + if(displayObject instanceof PIXI.Sprite) + { + var previousBatch + var nextBatch + + //console.log( previousSprite) + if(previousSprite instanceof PIXI.Sprite) + { + previousBatch = previousSprite.batch; + if(previousBatch) + { + if(previousBatch.texture == displayObject.texture.baseTexture && previousBatch.blendMode == displayObject.blendMode) + { + previousBatch.insertAfter(displayObject, previousSprite); + return; + } + } + } + else + { + // TODO reword! + previousBatch = previousSprite; + } + + if(nextSprite) + { + if(nextSprite instanceof PIXI.Sprite) + { + nextBatch = nextSprite.batch; + + //batch may not exist if item was added to the display list but not to the webGL + if(nextBatch) + { + if(nextBatch.texture == displayObject.texture.baseTexture && nextBatch.blendMode == displayObject.blendMode) + { + nextBatch.insertBefore(displayObject, nextSprite); + return; + } + else + { + if(nextBatch == previousBatch) + { + // THERE IS A SPLIT IN THIS BATCH! // + var splitBatch = previousBatch.split(nextSprite); + // COOL! + // add it back into the array + /* + * OOPS! + * seems the new sprite is in the middle of a batch + * lets split it.. + */ + var batch = PIXI.WebGLRenderer.getBatch(); + + var index = this.batchs.indexOf( previousBatch ); + batch.init(displayObject); + this.batchs.splice(index+1, 0, batch, splitBatch); + + return; + } + } + } + } + else + { + // TODO re-word! + nextBatch = nextSprite; + } + } + + /* + * looks like it does not belong to any batch! + * but is also not intersecting one.. + * time to create anew one! + */ + + var batch = PIXI.WebGLRenderer.getBatch(); + batch.init(displayObject); + + if(previousBatch) // if this is invalid it means + { + var index = this.batchs.indexOf( previousBatch ); + this.batchs.splice(index+1, 0, batch); + } + else + { + this.batchs.push(batch); + } + + } + else if(displayObject instanceof PIXI.TilingSprite) + { + // add to a batch!! + this.initTilingSprite(displayObject); + this.batchs.push(displayObject); + + } + else if(displayObject instanceof PIXI.Strip) + { + // add to a batch!! + this.initStrip(displayObject); + this.batchs.push(displayObject); + } + + // if its somthing else... then custom codes! + this.batchUpdate = true; +} + +PIXI.WebGLRenderGroup.prototype.addDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + + this.addDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.addDisplayObjectAndChildren(children[i]); + }; +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObject = function(displayObject) +{ + // loop through children.. + // display object // + + // add a child from the render group.. + // remove it and all its children! + //displayObject.cacheVisible = false;//displayObject.visible; + displayObject.__renderGroup = null; + + if(!displayObject.renderable)return; + + /* + * removing is a lot quicker.. + * + */ + var batchToRemove; + + if(displayObject instanceof PIXI.Sprite) + { + // should always have a batch! + var batch = displayObject.batch; + if(!batch)return; // this means the display list has been altered befre rendering + + batch.remove(displayObject); + + if(batch.size==0) + { + batchToRemove = batch; + } + } + else + { + batchToRemove = displayObject; + } + + /* + * Looks like there is somthing that needs removing! + */ + if(batchToRemove) + { + var index = this.batchs.indexOf( batchToRemove ); + if(index == -1)return;// this means it was added then removed before rendered + + // ok so.. check to see if you adjacent batchs should be joined. + // TODO may optimise? + if(index == 0 || index == this.batchs.length-1) + { + // wha - eva! just get of the empty batch! + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + + return; + } + + if(this.batchs[index-1] instanceof PIXI.WebGLBatch && this.batchs[index+1] instanceof PIXI.WebGLBatch) + { + if(this.batchs[index-1].texture == this.batchs[index+1].texture && this.batchs[index-1].blendMode == this.batchs[index+1].blendMode) + { + //console.log("MERGE") + this.batchs[index-1].merge(this.batchs[index+1]); + + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + PIXI.WebGLRenderer.returnBatch(this.batchs[index+1]); + this.batchs.splice(index, 2); + return; + } + } + + + this.batchs.splice(index, 1); + if(batchToRemove instanceof PIXI.WebGLBatch)PIXI.WebGLRenderer.returnBatch(batchToRemove); + } +} + +PIXI.WebGLRenderGroup.prototype.removeDisplayObjectAndChildren = function(displayObject) +{ + // TODO - this can be faster - but not as important right now + if(displayObject.__renderGroup != this)return; + + this.removeDisplayObject(displayObject); + var children = displayObject.children; + + for (var i=0; i < children.length; i++) + { + this.removeDisplayObjectAndChildren(children[i]); + }; +} + +/** + * @private + */ + +PIXI.WebGLRenderGroup.prototype.getNextRenderable = function(displayObject) +{ + /* + * LOOK FOR THE NEXT SPRITE + * This part looks for the closest next sprite that can go into a batch + * it keeps looking until it finds a sprite or gets to the end of the display + * scene graph + * + * These look a lot scarier than the actually are... + */ + + var nextSprite = displayObject; + do + { + // moving forward! + // if it has no children.. + if(nextSprite.children.length == 0) + { + //maynot have a parent + if(!nextSprite.parent)return null; + + // go along to the parent.. + while(nextSprite.childIndex == nextSprite.parent.children.length-1) + { + nextSprite = nextSprite.parent; + //console.log(">" + nextSprite); +// console.log(">-" + this.root); + if(nextSprite == this.root || !nextSprite.parent)//displayObject.stage) + { + nextSprite = null + break; + } + } + + if(nextSprite)nextSprite = nextSprite.parent.children[nextSprite.childIndex+1]; + } + else + { + nextSprite = nextSprite.children[0]; + } + + if(!nextSprite)break; + } + while(!nextSprite.renderable || !nextSprite.__renderGroup) + + return nextSprite; +} + +PIXI.WebGLRenderGroup.prototype.getPreviousRenderable = function(displayObject) +{ + /* + * LOOK FOR THE PREVIOUS SPRITE + * This part looks for the closest previous sprite that can go into a batch + * It keeps going back until it finds a sprite or the stage + */ + var previousSprite = displayObject; + do + { + if(previousSprite.childIndex == 0) + { + previousSprite = previousSprite.parent; + if(!previousSprite)return null; + } + else + { + + previousSprite = previousSprite.parent.children[previousSprite.childIndex-1]; + // what if the bloop has children??? + while(previousSprite.children.length != 0) + { + // keep diggin till we get to the last child + previousSprite = previousSprite.children[previousSprite.children.length-1]; + } + } + + if(previousSprite == this.root)break; + } + while(!previousSprite.renderable || !previousSprite.__renderGroup); + + return previousSprite; +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.initTilingSprite = function(sprite) +{ + var gl = this.gl; + + // make the texture tilable.. + + sprite.verticies = new Float32Array([0, 0, + sprite.width, 0, + sprite.width, sprite.height, + 0, sprite.height]); + + sprite.uvs = new Float32Array([0, 0, + 1, 0, + 1, 1, + 0, 1]); + + sprite.colors = new Float32Array([1,1,1,1]); + + sprite.indices = new Uint16Array([0, 1, 3,2])//, 2]); + + + sprite._vertexBuffer = gl.createBuffer(); + sprite._indexBuffer = gl.createBuffer(); + sprite._uvBuffer = gl.createBuffer(); + sprite._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.verticies, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.uvs, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, sprite.colors, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, sprite._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, sprite.indices, gl.STATIC_DRAW); + +// return ( (x > 0) && ((x & (x - 1)) == 0) ); + + if(sprite.texture.baseTexture._glTexture) + { + gl.bindTexture(gl.TEXTURE_2D, sprite.texture.baseTexture._glTexture); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.REPEAT); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.REPEAT); + sprite.texture.baseTexture._powerOf2 = true; + } + else + { + sprite.texture.baseTexture._powerOf2 = true; + } +} + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderStrip = function(strip, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; +// mat + var mat4Real = PIXI.mat3.toMat4(strip.worldTransform); + PIXI.mat4.transpose(mat4Real); + PIXI.mat4.multiply(projectionMatrix, mat4Real, mat4Real ) + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, mat4Real); + + if(strip.blendMode == PIXI.blendModes.NORMAL) + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); + } + else + { + gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_COLOR); + } + + if(!strip.dirty) + { + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, strip.verticies) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + + + } + else + { + strip.dirty = false; + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.vertexPositionAttribute, 2, gl.FLOAT, false, 0, 0); + + // update the uvs + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.textureCoordAttribute, 2, gl.FLOAT, false, 0, 0); + + gl.activeTexture(gl.TEXTURE0); + gl.bindTexture(gl.TEXTURE_2D, strip.texture.baseTexture._glTexture); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW) + gl.vertexAttribPointer(shaderProgram.colorAttribute, 1, gl.FLOAT, false, 0, 0); + + // dont need to upload! + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); + + } + //console.log(gl.TRIANGLE_STRIP) + gl.drawElements(gl.TRIANGLE_STRIP, strip.indices.length, gl.UNSIGNED_SHORT, 0); + + gl.uniformMatrix4fv(shaderProgram.mvMatrixUniform, false, projectionMatrix); + +} + + +/** + * @private + */ +PIXI.WebGLRenderGroup.prototype.renderTilingSprite = function(sprite, projectionMatrix) +{ + var gl = this.gl; + var shaderProgram = PIXI.shaderProgram; + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + var offsetX = tilePosition.x/sprite.texture.baseTexture.width; + var offsetY = tilePosition.y/sprite.texture.baseTexture.height; + + var scaleX = (sprite.width / sprite.texture.baseTexture.width) / tileScale.x; + var scaleY = (sprite.height / sprite.texture.baseTexture.height) / tileScale.y; + + sprite.uvs[0] = 0 - offsetX; + sprite.uvs[1] = 0 - offsetY; + + sprite.uvs[2] = (1 * scaleX) -offsetX; + sprite.uvs[3] = 0 - offsetY; + + sprite.uvs[4] = (1 *scaleX) - offsetX; + sprite.uvs[5] = (1 *scaleY) - offsetY; + + sprite.uvs[6] = 0 - offsetX; + sprite.uvs[7] = (1 *scaleY) - offsetY; + + gl.bindBuffer(gl.ARRAY_BUFFER, sprite._uvBuffer); + gl.bufferSubData(gl.ARRAY_BUFFER, 0, sprite.uvs) + + this.renderStrip(sprite, projectionMatrix); +} + + + +/** + * @private + */ +PIXI.WebGLRenderer.prototype.initStrip = function(strip) +{ + // build the strip! + var gl = this.gl; + var shaderProgram = this.shaderProgram; + + strip._vertexBuffer = gl.createBuffer(); + strip._indexBuffer = gl.createBuffer(); + strip._uvBuffer = gl.createBuffer(); + strip._colorBuffer = gl.createBuffer(); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._vertexBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.verticies, gl.DYNAMIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._uvBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.uvs, gl.STATIC_DRAW); + + gl.bindBuffer(gl.ARRAY_BUFFER, strip._colorBuffer); + gl.bufferData(gl.ARRAY_BUFFER, strip.colors, gl.STATIC_DRAW); + + + gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, strip._indexBuffer); + gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, strip.indices, gl.STATIC_DRAW); +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * the CanvasRenderer draws the stage and all its content onto a 2d canvas. This renderer should be used for browsers that do not support webGL. + * Dont forget to add the view to your DOM or you will not see anything :) + * @class CanvasRenderer + * @constructor + * @param width {Number} the width of the canvas view + * @default 0 + * @param height {Number} the height of the canvas view + * @default 0 + * @param view {Canvas} the canvas to use as a view, optional + * @param transparent {Boolean} the transparency of the render view, default false + * @default false + * + */ +PIXI.CanvasRenderer = function(width, height, view, transparent) +{ + this.transparent = transparent; + + /** + * The width of the canvas view + * @property width + * @type Number + * @default 800 + */ + this.width = width || 800; + /** + * The height of the canvas view + * @property height + * @type Number + * @default 600 + */ + this.height = height || 600; + + this.refresh = true; + + /** + * The canvas element that the everything is drawn to + * @property view + * @type Canvas + */ + this.view = view || document.createElement( 'canvas' ); + + // hack to enable some hardware acceleration! + //this.view.style["transform"] = "translatez(0)"; + + this.view.width = this.width; + this.view.height = this.height; + this.count = 0; + + /** + * The canvas context that the everything is drawn to + * @property context + * @type Canvas 2d Context + */ + this.context = this.view.getContext("2d"); +} + +// constructor +PIXI.CanvasRenderer.constructor = PIXI.CanvasRenderer; + +/** + * Renders the stage to its canvas view + * @method render + * @param stage {Stage} the Stage element to be rendered + */ +PIXI.CanvasRenderer.prototype.render = function(stage) +{ + // update children if need be + + //stage.__childrenAdded = []; + //stage.__childrenRemoved = []; + + // update textures if need be + PIXI.texturesToUpdate = []; + PIXI.texturesToDestroy = []; + + stage.updateTransform(); + + // update the background color + if(this.view.style.backgroundColor!=stage.backgroundColorString && !this.transparent)this.view.style.backgroundColor = stage.backgroundColorString; + + this.context.setTransform(1,0,0,1,0,0); + this.context.clearRect(0, 0, this.width, this.height) + this.renderDisplayObject(stage); + //as + + // run interaction! + if(stage.interactive) + { + //need to add some events! + if(!stage._interactiveEventsAdded) + { + stage._interactiveEventsAdded = true; + stage.interactionManager.setTarget(this); + } + } + + // remove frame updates.. + if(PIXI.Texture.frameUpdates.length > 0) + { + PIXI.Texture.frameUpdates = []; + } +} + +/** + * resizes the canvas view to the specified width and height + * @param the new width of the canvas view + * @param the new height of the canvas view + */ +PIXI.CanvasRenderer.prototype.resize = function(width, height) +{ + this.width = width; + this.height = height; + + this.view.width = width; + this.view.height = height; +} + +/** + * @private + */ + +PIXI.CanvasRenderer.prototype.renderDisplayObject = function(displayObject) +{ + var transform = displayObject.worldTransform; + var context = this.context; + //context.globalCompositeOperation = "source-over" + var blit = false; + + if(!displayObject.visible)return; + + if(displayObject instanceof PIXI.Sprite) + { + var frame = displayObject.texture.frame; + + if(frame) + { + context.globalAlpha = displayObject.worldAlpha; + + // BLITZ!!! + /* + * if the rotation is 0 then we can blitz it + * meaning we dont need to do a transform and also we + * can round to the nearest round number for a little extra speed! + */ + /*if(displayObject.rotation == 0) + { + if(!blit)this.context.setTransform(1,0,0,1,0,0); + blit = true; + context.drawImage(displayObject.texture.baseTexture.image, + frame.x, + frame.y, + frame.width, + frame.height, + (transform[2]+ ((displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width) * transform[0]), + (transform[5]+ ((displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height)* transform[4]), + (displayObject.width * transform[0]), + (displayObject.height * transform[4])); + + } + else + {*/ + // blit = false; + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]); + + context.drawImage(displayObject.texture.baseTexture.source, + frame.x, + frame.y, + frame.width, + frame.height, + (displayObject.anchor.x) * -frame.width, + (displayObject.anchor.y) * -frame.height, + // (displayObject.anchor.x - displayObject.texture.trim.x) * -frame.width, + // (displayObject.anchor.y - displayObject.texture.trim.y) * -frame.height, + + frame.width, + frame.height); + //} + } + } + else if(displayObject instanceof PIXI.Strip) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderStrip(displayObject); + } + else if(displayObject instanceof PIXI.TilingSprite) + { + context.setTransform(transform[0], transform[3], transform[1], transform[4], transform[2], transform[5]) + this.renderTilingSprite(displayObject); + } + else if(displayObject instanceof PIXI.CustomRenderable) + { + displayObject.renderCanvas(this); + } + + // render! + for (var i=0; i < displayObject.children.length; i++) + { + this.renderDisplayObject(displayObject.children[i]); + } + + this.context.setTransform(1,0,0,1,0,0); +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStripFlat = function(strip) +{ + var context = this.context; + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + + context.beginPath(); + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + + }; + +// context.globalCompositeOperation = 'lighter'; + context.fillStyle = "#FF0000"; + context.fill(); + context.closePath(); + //context.globalCompositeOperation = 'source-over'; +} + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderTilingSprite = function(sprite) +{ + var context = this.context; + + if(!sprite.__tilePattern) sprite.__tilePattern = context.createPattern(sprite.texture.baseTexture.source, "repeat"); + + context.beginPath(); + + var tilePosition = sprite.tilePosition; + var tileScale = sprite.tileScale; + + // offset + context.scale(tileScale.x,tileScale.y); + context.translate(tilePosition.x, tilePosition.y); + + context.fillStyle = sprite.__tilePattern; + context.fillRect(-tilePosition.x,-tilePosition.y,sprite.width / tileScale.x, sprite.height / tileScale.y); + + context.scale(1/tileScale.x, 1/tileScale.y); + context.translate(-tilePosition.x, -tilePosition.y); + + context.closePath(); +} + + + +/** + * @private + */ +PIXI.CanvasRenderer.prototype.renderStrip = function(strip) +{ + var context = this.context; + //context.globalCompositeOperation = 'lighter'; + // draw triangles!! + var verticies = strip.verticies; + var uvs = strip.uvs; + + var length = verticies.length/2; + this.count++; + for (var i=1; i < length-2; i++) + { + + // draw some triangles! + var index = i*2; + + var x0 = verticies[index], x1 = verticies[index+2], x2 = verticies[index+4]; + var y0 = verticies[index+1], y1 = verticies[index+3], y2 = verticies[index+5]; + + var u0 = uvs[index] * strip.texture.width, u1 = uvs[index+2] * strip.texture.width, u2 = uvs[index+4]* strip.texture.width; + var v0 = uvs[index+1]* strip.texture.height, v1 = uvs[index+3] * strip.texture.height, v2 = uvs[index+5]* strip.texture.height; + + + context.save(); + context.beginPath(); + context.moveTo(x0, y0); + context.lineTo(x1, y1); + context.lineTo(x2, y2); + context.closePath(); + + // context.fillStyle = "white"//rgb(1, 1, 1,1)); + // context.fill(); + context.clip(); + + + // Compute matrix transform + var delta = u0*v1 + v0*u2 + u1*v2 - v1*u2 - v0*u1 - u0*v2; + var delta_a = x0*v1 + v0*x2 + x1*v2 - v1*x2 - v0*x1 - x0*v2; + var delta_b = u0*x1 + x0*u2 + u1*x2 - x1*u2 - x0*u1 - u0*x2; + var delta_c = u0*v1*x2 + v0*x1*u2 + x0*u1*v2 - x0*v1*u2 - v0*u1*x2 - u0*x1*v2; + var delta_d = y0*v1 + v0*y2 + y1*v2 - v1*y2 - v0*y1 - y0*v2; + var delta_e = u0*y1 + y0*u2 + u1*y2 - y1*u2 - y0*u1 - u0*y2; + var delta_f = u0*v1*y2 + v0*y1*u2 + y0*u1*v2 - y0*v1*u2 - v0*u1*y2 - u0*y1*v2; + + + + + context.transform(delta_a/delta, delta_d/delta, + delta_b/delta, delta_e/delta, + delta_c/delta, delta_f/delta); + + context.drawImage(strip.texture.baseTexture.source, 0, 0); + context.restore(); + }; + +// context.globalCompositeOperation = 'source-over'; +} + + + + + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +PIXI.Strip = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + this.texture = texture; + this.blendMode = PIXI.blendModes.NORMAL; + + try + { + this.uvs = new Float32Array([0, 1, + 1, 1, + 1, 0, 0,1]); + + this.verticies = new Float32Array([0, 0, + 0,0, + 0,0, 0, + 0, 0]); + + this.colors = new Float32Array([1, 1, 1, 1]); + + this.indices = new Uint16Array([0, 1, 2, 3]); + } + catch(error) + { + this.uvs = [0, 1, + 1, 1, + 1, 0, 0,1]; + + this.verticies = [0, 0, + 0,0, + 0,0, 0, + 0, 0]; + + this.colors = [1, 1, 1, 1]; + + this.indices = [0, 1, 2, 3]; + } + + + /* + this.uvs = new Float32Array() + this.verticies = new Float32Array() + this.colors = new Float32Array() + this.indices = new Uint16Array() +*/ + this.width = width; + this.height = height; + + // load the texture! + if(texture.baseTexture.hasLoaded) + { + this.width = this.texture.frame.width; + this.height = this.texture.frame.height; + this.updateFrame = true; + } + else + { + this.onTextureUpdateBind = this.onTextureUpdate.bind(this); + this.texture.addEventListener( 'update', this.onTextureUpdateBind ); + } + + this.renderable = true; +} + +// constructor +PIXI.Strip.constructor = PIXI.Strip; +PIXI.Strip.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.Strip.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.width = texture.frame.width; + this.height = texture.frame.height; + this.updateFrame = true; +} + +PIXI.Strip.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} +// some helper functions.. + + +/** + * @author Mat Groves http://matgroves.com/ + */ + + +PIXI.Rope = function(texture, points) +{ + PIXI.Strip.call( this, texture ); + this.points = points; + + try + { + this.verticies = new Float32Array( points.length * 4); + this.uvs = new Float32Array( points.length * 4); + this.colors = new Float32Array( points.length * 2); + this.indices = new Uint16Array( points.length * 2); + } + catch(error) + { + this.verticies = verticies + + this.uvs = uvs + this.colors = colors + this.indices = indices + } + + this.refresh(); +} + + +// constructor +PIXI.Rope.constructor = PIXI.Rope; +PIXI.Rope.prototype = Object.create( PIXI.Strip.prototype ); + +PIXI.Rope.prototype.refresh = function() +{ + var points = this.points; + if(points.length < 1)return; + + var uvs = this.uvs + var indices = this.indices; + var colors = this.colors; + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + + uvs[0] = 0 + uvs[1] = 1 + uvs[2] = 0 + uvs[3] = 1 + + colors[0] = 1; + colors[1] = 1; + + indices[0] = 0; + indices[1] = 1; + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + // time to do some smart drawing! + var amount = i/(total-1) + + if(i%2) + { + uvs[index] = amount; + uvs[index+1] = 0; + + uvs[index+2] = amount + uvs[index+3] = 1 + + } + else + { + uvs[index] = amount + uvs[index+1] = 0 + + uvs[index+2] = amount + uvs[index+3] = 1 + } + + index = i * 2; + colors[index] = 1; + colors[index+1] = 1; + + index = i * 2; + indices[index] = index; + indices[index + 1] = index + 1; + + lastPoint = point; + } +} + +PIXI.Rope.prototype.updateTransform = function() +{ + + var points = this.points; + if(points.length < 1)return; + + var verticies = this.verticies + + var lastPoint = points[0]; + var nextPoint; + var perp = {x:0, y:0}; + var point = points[0]; + + this.count-=0.2; + + verticies[0] = point.x + perp.x + verticies[1] = point.y + perp.y //+ 200 + verticies[2] = point.x - perp.x + verticies[3] = point.y - perp.y//+200 + // time to do some smart drawing! + + var total = points.length; + + for (var i = 1; i < total; i++) + { + + var point = points[i]; + var index = i * 4; + + if(i < points.length-1) + { + nextPoint = points[i+1]; + } + else + { + nextPoint = point + } + + perp.y = -(nextPoint.x - lastPoint.x); + perp.x = nextPoint.y - lastPoint.y; + + var ratio = (1 - (i / (total-1))) * 10; + if(ratio > 1)ratio = 1; + + var perpLength = Math.sqrt(perp.x * perp.x + perp.y * perp.y); + var num = this.texture.height/2//(20 + Math.abs(Math.sin((i + this.count) * 0.3) * 50) )* ratio; + perp.x /= perpLength; + perp.y /= perpLength; + + perp.x *= num; + perp.y *= num; + + verticies[index] = point.x + perp.x + verticies[index+1] = point.y + perp.y + verticies[index+2] = point.x - perp.x + verticies[index+3] = point.y - perp.y + + lastPoint = point; + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call( this ); +} + +PIXI.Rope.prototype.setTexture = function(texture) +{ + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + + + + + +/** + * @author Mat Groves http://matgroves.com/ + */ + +/** + * A tiling sprite is a fast way of rendering a tiling image + * @class TilingSprite + * @extends DisplayObjectContainer + * @constructor + * @param texture {Texture} the texture of the tiling sprite + * @param width {Number} the width of the tiling sprite + * @param height {Number} the height of the tiling sprite + */ +PIXI.TilingSprite = function(texture, width, height) +{ + PIXI.DisplayObjectContainer.call( this ); + + this.texture = texture; + this.width = width; + this.height = height; + this.renderable = true; + + /** + * The scaling of the image that is being tiled + * @property tileScale + * @type Point + */ + this.tileScale = new PIXI.Point(1,1); + /** + * The offset position of the image that is being tiled + * @property tilePosition + * @type Point + */ + this.tilePosition = new PIXI.Point(0,0); + + this.blendMode = PIXI.blendModes.NORMAL +} + +// constructor +PIXI.TilingSprite.constructor = PIXI.TilingSprite; +PIXI.TilingSprite.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); + +PIXI.TilingSprite.prototype.setTexture = function(texture) +{ + //TODO SET THE TEXTURES + //TODO VISIBILITY + + // stop current texture + this.texture = texture; + this.updateFrame = true; +} + +PIXI.TilingSprite.prototype.onTextureUpdate = function(event) +{ + this.updateFrame = true; +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + * based on pixi impact spine implementation made by Eemeli Kelokorpi (@ekelokorpi) https://github.com/ekelokorpi + * + * Awesome JS run time provided by EsotericSoftware + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +/** + * A class that enables the you to import and run your spine animations in pixi. + * Spine animation data needs to be loaded using the PIXI.AssetLoader or PIXI.SpineLoader before it can be used by this class + * Also due to a clash of names You will need to change the extension of the spine file from *.json to *.anim for it to load + * See example 12 (http://www.goodboydigital.com/pixijs/examples/12/) to see a working example and check out the source + * @class Spine + * @constructor + * @extends + * @param {String} url the url of the spine anim file to be used + */ +PIXI.Spine = function(url) +{ + PIXI.DisplayObjectContainer.call(this); + + this.spineData = PIXI.AnimCache[url]; + + if(!this.spineData) + { + throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + url); + return; + } + + this.count = 0; + + this.sprites = []; + + this.skeleton = new spine.Skeleton(this.spineData); + this.skeleton.updateWorldTransform(); + + this.stateData = new spine.AnimationStateData(this.spineData); + this.state = new spine.AnimationState(this.stateData); + + // add the sprites.. + for (var i = 0; i < this.skeleton.drawOrder.length; i++) { + + var attachmentName = this.skeleton.drawOrder[i].data.attachmentName; + + // kind of an assumtion here. that its a png + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + + var sprite = new PIXI.Sprite(PIXI.Texture.fromFrame(attachmentName)); + sprite.anchor.x = sprite.anchor.y = 0.5; + this.addChild(sprite); + this.sprites.push(sprite); + }; +} + +PIXI.Spine.constructor = PIXI.Spine; +PIXI.Spine.prototype = Object.create( PIXI.DisplayObjectContainer.prototype ); +PIXI.Spine.prototype.updateTransform = function() +{ + // TODO should make this time based really.. + this.state.update(1/60); + this.state.apply(this.skeleton); + this.skeleton.updateWorldTransform(); + + + for (var i = 0; i < this.skeleton.drawOrder.length; i++) + { + var slot = this.skeleton.drawOrder[i]; + + var x = slot.bone.worldX + slot.attachment.x * slot.bone.m00 + slot.attachment.y * slot.bone.m01 + slot.attachment.width * 0.5; + var y = slot.bone.worldY + slot.attachment.x * slot.bone.m10 + slot.attachment.y * slot.bone.m11 + slot.attachment.height * 0.5; + //console.log(x + ' : ' + y); + + + //console.log(slot.attachment.name) + if(slot.cacheName != slot.attachment.name) + { + var attachmentName = slot.attachment.name; + + if(!PIXI.TextureCache[attachmentName]) + { + attachmentName += ".png"; + } + + this.sprites[i].setTexture(PIXI.TextureCache[attachmentName]); + + slot.cacheName = slot.attachment.name; + } + + x += -((slot.attachment.width * (slot.bone.worldScaleX + slot.attachment.scaleX - 1))>>1); + y += -((slot.attachment.height * (slot.bone.worldScaleY + slot.attachment.scaleY - 1))>>1); + + + this.sprites[i].position.x = x; + this.sprites[i].position.y = y; + this.sprites[i].rotation = (-(slot.bone.worldRotation + slot.attachment.rotation)) * (Math.PI/180); + } + + PIXI.DisplayObjectContainer.prototype.updateTransform.call(this); +} + +/* + * Awesome JS run time provided by EsotericSoftware + * + * https://github.com/EsotericSoftware/spine-runtimes + * + */ + +var spine = {}; + +spine.BoneData = function (name, parent) { + this.name = name; + this.parent = parent; +}; +spine.BoneData.prototype = { + length: 0, + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1 +}; + +spine.SlotData = function (name, boneData) { + this.name = name; + this.boneData = boneData; +}; +spine.SlotData.prototype = { + r: 1, g: 1, b: 1, a: 1, + attachmentName: null +}; + +spine.Bone = function (boneData, parent) { + this.data = boneData; + this.parent = parent; + this.setToSetupPose(); +}; +spine.Bone.yDown = false; +spine.Bone.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + m00: 0, m01: 0, worldX: 0, // a b x + m10: 0, m11: 0, worldY: 0, // c d y + worldRotation: 0, + worldScaleX: 1, worldScaleY: 1, + updateWorldTransform: function (flipX, flipY) { + var parent = this.parent; + if (parent != null) { + this.worldX = this.x * parent.m00 + this.y * parent.m01 + parent.worldX; + this.worldY = this.x * parent.m10 + this.y * parent.m11 + parent.worldY; + this.worldScaleX = parent.worldScaleX * this.scaleX; + this.worldScaleY = parent.worldScaleY * this.scaleY; + this.worldRotation = parent.worldRotation + this.rotation; + } else { + this.worldX = this.x; + this.worldY = this.y; + this.worldScaleX = this.scaleX; + this.worldScaleY = this.scaleY; + this.worldRotation = this.rotation; + } + var radians = this.worldRotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + this.m00 = cos * this.worldScaleX; + this.m10 = sin * this.worldScaleX; + this.m01 = -sin * this.worldScaleY; + this.m11 = cos * this.worldScaleY; + if (flipX) { + this.m00 = -this.m00; + this.m01 = -this.m01; + } + if (flipY) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + if (spine.Bone.yDown) { + this.m10 = -this.m10; + this.m11 = -this.m11; + } + }, + setToSetupPose: function () { + var data = this.data; + this.x = data.x; + this.y = data.y; + this.rotation = data.rotation; + this.scaleX = data.scaleX; + this.scaleY = data.scaleY; + } +}; + +spine.Slot = function (slotData, skeleton, bone) { + this.data = slotData; + this.skeleton = skeleton; + this.bone = bone; + this.setToSetupPose(); +}; +spine.Slot.prototype = { + r: 1, g: 1, b: 1, a: 1, + _attachmentTime: 0, + attachment: null, + setAttachment: function (attachment) { + this.attachment = attachment; + this._attachmentTime = this.skeleton.time; + }, + setAttachmentTime: function (time) { + this._attachmentTime = this.skeleton.time - time; + }, + getAttachmentTime: function () { + return this.skeleton.time - this._attachmentTime; + }, + setToSetupPose: function () { + var data = this.data; + this.r = data.r; + this.g = data.g; + this.b = data.b; + this.a = data.a; + + var slotDatas = this.skeleton.data.slots; + for (var i = 0, n = slotDatas.length; i < n; i++) { + if (slotDatas[i] == data) { + this.setAttachment(!data.attachmentName ? null : this.skeleton.getAttachmentBySlotIndex(i, data.attachmentName)); + break; + } + } + } +}; + +spine.Skin = function (name) { + this.name = name; + this.attachments = {}; +}; +spine.Skin.prototype = { + addAttachment: function (slotIndex, name, attachment) { + this.attachments[slotIndex + ":" + name] = attachment; + }, + getAttachment: function (slotIndex, name) { + return this.attachments[slotIndex + ":" + name]; + }, + _attachAll: function (skeleton, oldSkin) { + for (var key in oldSkin.attachments) { + var colon = key.indexOf(":"); + var slotIndex = parseInt(key.substring(0, colon)); + var name = key.substring(colon + 1); + var slot = skeleton.slots[slotIndex]; + if (slot.attachment && slot.attachment.name == name) { + var attachment = this.getAttachment(slotIndex, name); + if (attachment) slot.setAttachment(attachment); + } + } + } +}; + +spine.Animation = function (name, timelines, duration) { + this.name = name; + this.timelines = timelines; + this.duration = duration; +}; +spine.Animation.prototype = { + apply: function (skeleton, time, loop) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, 1); + }, + mix: function (skeleton, time, loop, alpha) { + if (loop && this.duration != 0) time %= this.duration; + var timelines = this.timelines; + for (var i = 0, n = timelines.length; i < n; i++) + timelines[i].apply(skeleton, time, alpha); + } +}; + +spine.binarySearch = function (values, target, step) { + var low = 0; + var high = Math.floor(values.length / step) - 2; + if (high == 0) return step; + var current = high >>> 1; + while (true) { + if (values[(current + 1) * step] <= target) + low = current + 1; + else + high = current; + if (low == high) return (low + 1) * step; + current = (low + high) >>> 1; + } +}; +spine.linearSearch = function (values, target, step) { + for (var i = 0, last = values.length - step; i <= last; i += step) + if (values[i] > target) return i; + return -1; +}; + +spine.Curves = function (frameCount) { + this.curves = []; // dfx, dfy, ddfx, ddfy, dddfx, dddfy, ... + this.curves.length = (frameCount - 1) * 6; +}; +spine.Curves.prototype = { + setLinear: function (frameIndex) { + this.curves[frameIndex * 6] = 0/*LINEAR*/; + }, + setStepped: function (frameIndex) { + this.curves[frameIndex * 6] = -1/*STEPPED*/; + }, + /** Sets the control handle positions for an interpolation bezier curve used to transition from this keyframe to the next. + * cx1 and cx2 are from 0 to 1, representing the percent of time between the two keyframes. cy1 and cy2 are the percent of + * the difference between the keyframe's values. */ + setCurve: function (frameIndex, cx1, cy1, cx2, cy2) { + var subdiv_step = 1 / 10/*BEZIER_SEGMENTS*/; + var subdiv_step2 = subdiv_step * subdiv_step; + var subdiv_step3 = subdiv_step2 * subdiv_step; + var pre1 = 3 * subdiv_step; + var pre2 = 3 * subdiv_step2; + var pre4 = 6 * subdiv_step2; + var pre5 = 6 * subdiv_step3; + var tmp1x = -cx1 * 2 + cx2; + var tmp1y = -cy1 * 2 + cy2; + var tmp2x = (cx1 - cx2) * 3 + 1; + var tmp2y = (cy1 - cy2) * 3 + 1; + var i = frameIndex * 6; + var curves = this.curves; + curves[i] = cx1 * pre1 + tmp1x * pre2 + tmp2x * subdiv_step3; + curves[i + 1] = cy1 * pre1 + tmp1y * pre2 + tmp2y * subdiv_step3; + curves[i + 2] = tmp1x * pre4 + tmp2x * pre5; + curves[i + 3] = tmp1y * pre4 + tmp2y * pre5; + curves[i + 4] = tmp2x * pre5; + curves[i + 5] = tmp2y * pre5; + }, + getCurvePercent: function (frameIndex, percent) { + percent = percent < 0 ? 0 : (percent > 1 ? 1 : percent); + var curveIndex = frameIndex * 6; + var curves = this.curves; + var dfx = curves[curveIndex]; + if (!dfx/*LINEAR*/) return percent; + if (dfx == -1/*STEPPED*/) return 0; + var dfy = curves[curveIndex + 1]; + var ddfx = curves[curveIndex + 2]; + var ddfy = curves[curveIndex + 3]; + var dddfx = curves[curveIndex + 4]; + var dddfy = curves[curveIndex + 5]; + var x = dfx, y = dfy; + var i = 10/*BEZIER_SEGMENTS*/ - 2; + while (true) { + if (x >= percent) { + var lastX = x - dfx; + var lastY = y - dfy; + return lastY + (y - lastY) * (percent - lastX) / (x - lastX); + } + if (i == 0) break; + i--; + dfx += ddfx; + dfy += ddfy; + ddfx += dddfx; + ddfy += dddfy; + x += dfx; + y += dfy; + } + return y + (1 - y) * (percent - x) / (1 - x); // Last point is 1,1. + } +}; + +spine.RotateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, angle, ... + this.frames.length = frameCount * 2; +}; +spine.RotateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, angle) { + frameIndex *= 2; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = angle; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 2]) { // Time is after last frame. + var amount = bone.data.rotation + frames[frames.length - 1] - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 2); + var lastFrameValue = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 2/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 2 - 1, percent); + + var amount = frames[frameIndex + 1/*FRAME_VALUE*/] - lastFrameValue; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + amount = bone.data.rotation + (lastFrameValue + amount * percent) - bone.rotation; + while (amount > 180) + amount -= 360; + while (amount < -180) + amount += 360; + bone.rotation += amount * alpha; + } +}; + +spine.TranslateTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.TranslateTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.x += (bone.data.x + frames[frames.length - 2] - bone.x) * alpha; + bone.y += (bone.data.y + frames[frames.length - 1] - bone.y) * alpha; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + bone.x += (bone.data.x + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.x) * alpha; + bone.y += (bone.data.y + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.y) * alpha; + } +}; + +spine.ScaleTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, x, y, ... + this.frames.length = frameCount * 3; +}; +spine.ScaleTimeline.prototype = { + boneIndex: 0, + getFrameCount: function () { + return this.frames.length / 3; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 3; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = x; + this.frames[frameIndex + 2] = y; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var bone = skeleton.bones[this.boneIndex]; + + if (time >= frames[frames.length - 3]) { // Time is after last frame. + bone.scaleX += (bone.data.scaleX - 1 + frames[frames.length - 2] - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + frames[frames.length - 1] - bone.scaleY) * alpha; + + + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 3); + var lastFrameX = frames[frameIndex - 2]; + var lastFrameY = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex + -3/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 3 - 1, percent); + + bone.scaleX += (bone.data.scaleX - 1 + lastFrameX + (frames[frameIndex + 1/*FRAME_X*/] - lastFrameX) * percent - bone.scaleX) * alpha; + bone.scaleY += (bone.data.scaleY - 1 + lastFrameY + (frames[frameIndex + 2/*FRAME_Y*/] - lastFrameY) * percent - bone.scaleY) * alpha; + } +}; + +spine.ColorTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, r, g, b, a, ... + this.frames.length = frameCount * 5; +}; +spine.ColorTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, x, y) { + frameIndex *= 5; + this.frames[frameIndex] = time; + this.frames[frameIndex + 1] = r; + this.frames[frameIndex + 2] = g; + this.frames[frameIndex + 3] = b; + this.frames[frameIndex + 4] = a; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + var slot = skeleton.slots[this.slotIndex]; + + if (time >= frames[frames.length - 5]) { // Time is after last frame. + var i = frames.length - 1; + slot.r = frames[i - 3]; + slot.g = frames[i - 2]; + slot.b = frames[i - 1]; + slot.a = frames[i]; + return; + } + + // Interpolate between the last frame and the current frame. + var frameIndex = spine.binarySearch(frames, time, 5); + var lastFrameR = frames[frameIndex - 4]; + var lastFrameG = frames[frameIndex - 3]; + var lastFrameB = frames[frameIndex - 2]; + var lastFrameA = frames[frameIndex - 1]; + var frameTime = frames[frameIndex]; + var percent = 1 - (time - frameTime) / (frames[frameIndex - 5/*LAST_FRAME_TIME*/] - frameTime); + percent = this.curves.getCurvePercent(frameIndex / 5 - 1, percent); + + var r = lastFrameR + (frames[frameIndex + 1/*FRAME_R*/] - lastFrameR) * percent; + var g = lastFrameG + (frames[frameIndex + 2/*FRAME_G*/] - lastFrameG) * percent; + var b = lastFrameB + (frames[frameIndex + 3/*FRAME_B*/] - lastFrameB) * percent; + var a = lastFrameA + (frames[frameIndex + 4/*FRAME_A*/] - lastFrameA) * percent; + if (alpha < 1) { + slot.r += (r - slot.r) * alpha; + slot.g += (g - slot.g) * alpha; + slot.b += (b - slot.b) * alpha; + slot.a += (a - slot.a) * alpha; + } else { + slot.r = r; + slot.g = g; + slot.b = b; + slot.a = a; + } + } +}; + +spine.AttachmentTimeline = function (frameCount) { + this.curves = new spine.Curves(frameCount); + this.frames = []; // time, ... + this.frames.length = frameCount; + this.attachmentNames = []; // time, ... + this.attachmentNames.length = frameCount; +}; +spine.AttachmentTimeline.prototype = { + slotIndex: 0, + getFrameCount: function () { + return this.frames.length / 2; + }, + setFrame: function (frameIndex, time, attachmentName) { + this.frames[frameIndex] = time; + this.attachmentNames[frameIndex] = attachmentName; + }, + apply: function (skeleton, time, alpha) { + var frames = this.frames; + if (time < frames[0]) return; // Time is before first frame. + + var frameIndex; + if (time >= frames[frames.length - 1]) // Time is after last frame. + frameIndex = frames.length - 1; + else + frameIndex = spine.binarySearch(frames, time, 1) - 1; + + var attachmentName = this.attachmentNames[frameIndex]; + //console.log(skeleton.slots[this.slotIndex]) + + // change the name! + // skeleton.slots[this.slotIndex].attachmentName = attachmentName; + + skeleton.slots[this.slotIndex].setAttachment(!attachmentName ? null : skeleton.getAttachmentBySlotIndex(this.slotIndex, attachmentName)); + } +}; + +spine.SkeletonData = function () { + this.bones = []; + this.slots = []; + this.skins = []; + this.animations = []; +}; +spine.SkeletonData.prototype = { + defaultSkin: null, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) { + if (slots[i].name == slotName) return slot[i]; + } + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].name == slotName) return i; + return -1; + }, + /** @return May be null. */ + findSkin: function (skinName) { + var skins = this.skins; + for (var i = 0, n = skins.length; i < n; i++) + if (skins[i].name == skinName) return skins[i]; + return null; + }, + /** @return May be null. */ + findAnimation: function (animationName) { + var animations = this.animations; + for (var i = 0, n = animations.length; i < n; i++) + if (animations[i].name == animationName) return animations[i]; + return null; + } +}; + +spine.Skeleton = function (skeletonData) { + this.data = skeletonData; + + this.bones = []; + for (var i = 0, n = skeletonData.bones.length; i < n; i++) { + var boneData = skeletonData.bones[i]; + var parent = !boneData.parent ? null : this.bones[skeletonData.bones.indexOf(boneData.parent)]; + this.bones.push(new spine.Bone(boneData, parent)); + } + + this.slots = []; + this.drawOrder = []; + for (var i = 0, n = skeletonData.slots.length; i < n; i++) { + var slotData = skeletonData.slots[i]; + var bone = this.bones[skeletonData.bones.indexOf(slotData.boneData)]; + var slot = new spine.Slot(slotData, this, bone); + this.slots.push(slot); + this.drawOrder.push(slot); + } +}; +spine.Skeleton.prototype = { + x: 0, y: 0, + skin: null, + r: 1, g: 1, b: 1, a: 1, + time: 0, + flipX: false, flipY: false, + /** Updates the world transform for each bone. */ + updateWorldTransform: function () { + var flipX = this.flipX; + var flipY = this.flipY; + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].updateWorldTransform(flipX, flipY); + }, + /** Sets the bones and slots to their setup pose values. */ + setToSetupPose: function () { + this.setBonesToSetupPose(); + this.setSlotsToSetupPose(); + }, + setBonesToSetupPose: function () { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + bones[i].setToSetupPose(); + }, + setSlotsToSetupPose: function () { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + slots[i].setToSetupPose(i); + }, + /** @return May return null. */ + getRootBone: function () { + return this.bones.length == 0 ? null : this.bones[0]; + }, + /** @return May be null. */ + findBone: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return bones[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findBoneIndex: function (boneName) { + var bones = this.bones; + for (var i = 0, n = bones.length; i < n; i++) + if (bones[i].data.name == boneName) return i; + return -1; + }, + /** @return May be null. */ + findSlot: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return slots[i]; + return null; + }, + /** @return -1 if the bone was not found. */ + findSlotIndex: function (slotName) { + var slots = this.slots; + for (var i = 0, n = slots.length; i < n; i++) + if (slots[i].data.name == slotName) return i; + return -1; + }, + setSkinByName: function (skinName) { + var skin = this.data.findSkin(skinName); + if (!skin) throw "Skin not found: " + skinName; + this.setSkin(skin); + }, + /** Sets the skin used to look up attachments not found in the {@link SkeletonData#getDefaultSkin() default skin}. Attachments + * from the new skin are attached if the corresponding attachment from the old skin was attached. + * @param newSkin May be null. */ + setSkin: function (newSkin) { + if (this.skin && newSkin) newSkin._attachAll(this, this.skin); + this.skin = newSkin; + }, + /** @return May be null. */ + getAttachmentBySlotName: function (slotName, attachmentName) { + return this.getAttachmentBySlotIndex(this.data.findSlotIndex(slotName), attachmentName); + }, + /** @return May be null. */ + getAttachmentBySlotIndex: function (slotIndex, attachmentName) { + if (this.skin) { + var attachment = this.skin.getAttachment(slotIndex, attachmentName); + if (attachment) return attachment; + } + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + return null; + }, + /** @param attachmentName May be null. */ + setAttachment: function (slotName, attachmentName) { + var slots = this.slots; + for (var i = 0, n = slots.size; i < n; i++) { + var slot = slots[i]; + if (slot.data.name == slotName) { + var attachment = null; + if (attachmentName) { + + attachment = this.getAttachment(i, attachmentName); + if (attachment == null) throw "Attachment not found: " + attachmentName + ", for slot: " + slotName; + } + + slot.setAttachment(attachment); + return; + } + } + throw "Slot not found: " + slotName; + }, + update: function (delta) { + time += delta; + } +}; + +spine.AttachmentType = { + region: 0 +}; + +spine.RegionAttachment = function () { + this.offset = []; + this.offset.length = 8; + this.uvs = []; + this.uvs.length = 8; +}; +spine.RegionAttachment.prototype = { + x: 0, y: 0, + rotation: 0, + scaleX: 1, scaleY: 1, + width: 0, height: 0, + rendererObject: null, + regionOffsetX: 0, regionOffsetY: 0, + regionWidth: 0, regionHeight: 0, + regionOriginalWidth: 0, regionOriginalHeight: 0, + setUVs: function (u, v, u2, v2, rotate) { + var uvs = this.uvs; + if (rotate) { + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v2; + uvs[4/*X3*/] = u; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v; + uvs[0/*X1*/] = u2; + uvs[1/*Y1*/] = v2; + } else { + uvs[0/*X1*/] = u; + uvs[1/*Y1*/] = v2; + uvs[2/*X2*/] = u; + uvs[3/*Y2*/] = v; + uvs[4/*X3*/] = u2; + uvs[5/*Y3*/] = v; + uvs[6/*X4*/] = u2; + uvs[7/*Y4*/] = v2; + } + }, + updateOffset: function () { + var regionScaleX = this.width / this.regionOriginalWidth * this.scaleX; + var regionScaleY = this.height / this.regionOriginalHeight * this.scaleY; + var localX = -this.width / 2 * this.scaleX + this.regionOffsetX * regionScaleX; + var localY = -this.height / 2 * this.scaleY + this.regionOffsetY * regionScaleY; + var localX2 = localX + this.regionWidth * regionScaleX; + var localY2 = localY + this.regionHeight * regionScaleY; + var radians = this.rotation * Math.PI / 180; + var cos = Math.cos(radians); + var sin = Math.sin(radians); + var localXCos = localX * cos + this.x; + var localXSin = localX * sin; + var localYCos = localY * cos + this.y; + var localYSin = localY * sin; + var localX2Cos = localX2 * cos + this.x; + var localX2Sin = localX2 * sin; + var localY2Cos = localY2 * cos + this.y; + var localY2Sin = localY2 * sin; + var offset = this.offset; + offset[0/*X1*/] = localXCos - localYSin; + offset[1/*Y1*/] = localYCos + localXSin; + offset[2/*X2*/] = localXCos - localY2Sin; + offset[3/*Y2*/] = localY2Cos + localXSin; + offset[4/*X3*/] = localX2Cos - localY2Sin; + offset[5/*Y3*/] = localY2Cos + localX2Sin; + offset[6/*X4*/] = localX2Cos - localYSin; + offset[7/*Y4*/] = localYCos + localX2Sin; + }, + computeVertices: function (x, y, bone, vertices) { + + x += bone.worldX; + y += bone.worldY; + var m00 = bone.m00; + var m01 = bone.m01; + var m10 = bone.m10; + var m11 = bone.m11; + var offset = this.offset; + vertices[0/*X1*/] = offset[0/*X1*/] * m00 + offset[1/*Y1*/] * m01 + x; + vertices[1/*Y1*/] = offset[0/*X1*/] * m10 + offset[1/*Y1*/] * m11 + y; + vertices[2/*X2*/] = offset[2/*X2*/] * m00 + offset[3/*Y2*/] * m01 + x; + vertices[3/*Y2*/] = offset[2/*X2*/] * m10 + offset[3/*Y2*/] * m11 + y; + vertices[4/*X3*/] = offset[4/*X3*/] * m00 + offset[5/*X3*/] * m01 + x; + vertices[5/*X3*/] = offset[4/*X3*/] * m10 + offset[5/*X3*/] * m11 + y; + vertices[6/*X4*/] = offset[6/*X4*/] * m00 + offset[7/*Y4*/] * m01 + x; + vertices[7/*Y4*/] = offset[6/*X4*/] * m10 + offset[7/*Y4*/] * m11 + y; + } +} + +spine.AnimationStateData = function (skeletonData) { + this.skeletonData = skeletonData; + this.animationToMixTime = {}; +}; +spine.AnimationStateData.prototype = { + setMixByName: function (fromName, toName, duration) { + var from = this.skeletonData.findAnimation(fromName); + if (!from) throw "Animation not found: " + fromName; + var to = this.skeletonData.findAnimation(toName); + if (!to) throw "Animation not found: " + toName; + this.setMix(from, to, duration); + }, + setMix: function (from, to, duration) { + this.animationToMixTime[from.name + ":" + to.name] = duration; + }, + getMix: function (from, to) { + var time = this.animationToMixTime[from.name + ":" + to.name]; + return time ? time : 0; + } +}; + +spine.AnimationState = function (stateData) { + this.data = stateData; + this.queue = []; +}; +spine.AnimationState.prototype = { + current: null, + previous: null, + currentTime: 0, + previousTime: 0, + currentLoop: false, + previousLoop: false, + mixTime: 0, + mixDuration: 0, + update: function (delta) { + this.currentTime += delta; + this.previousTime += delta; + this.mixTime += delta; + + if (this.queue.length > 0) { + var entry = this.queue[0]; + if (this.currentTime >= entry.delay) { + this._setAnimation(entry.animation, entry.loop); + this.queue.shift(); + } + } + }, + apply: function (skeleton) { + if (!this.current) return; + if (this.previous) { + this.previous.apply(skeleton, this.previousTime, this.previousLoop); + var alpha = this.mixTime / this.mixDuration; + if (alpha >= 1) { + alpha = 1; + this.previous = null; + } + this.current.mix(skeleton, this.currentTime, this.currentLoop, alpha); + } else + this.current.apply(skeleton, this.currentTime, this.currentLoop); + }, + clearAnimation: function () { + this.previous = null; + this.current = null; + this.queue.length = 0; + }, + _setAnimation: function (animation, loop) { + this.previous = null; + if (animation && this.current) { + this.mixDuration = this.data.getMix(this.current, animation); + if (this.mixDuration > 0) { + this.mixTime = 0; + this.previous = this.current; + this.previousTime = this.currentTime; + this.previousLoop = this.currentLoop; + } + } + this.current = animation; + this.currentLoop = loop; + this.currentTime = 0; + }, + /** @see #setAnimation(Animation, Boolean) */ + setAnimationByName: function (animationName, loop) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.setAnimation(animation, loop); + }, + /** Set the current animation. Any queued animations are cleared and the current animation time is set to 0. + * @param animation May be null. */ + setAnimation: function (animation, loop) { + this.queue.length = 0; + this._setAnimation(animation, loop); + }, + /** @see #addAnimation(Animation, Boolean, Number) */ + addAnimationByName: function (animationName, loop, delay) { + var animation = this.data.skeletonData.findAnimation(animationName); + if (!animation) throw "Animation not found: " + animationName; + this.addAnimation(animation, loop, delay); + }, + /** Adds an animation to be played delay seconds after the current or last queued animation. + * @param delay May be <= 0 to use duration of previous animation minus any mix duration plus the negative delay. */ + addAnimation: function (animation, loop, delay) { + var entry = {}; + entry.animation = animation; + entry.loop = loop; + + if (!delay || delay <= 0) { + var previousAnimation = this.queue.length == 0 ? this.current : this.queue[this.queue.length - 1].animation; + if (previousAnimation != null) + delay = previousAnimation.duration - this.data.getMix(previousAnimation, animation) + (delay || 0); + else + delay = 0; + } + entry.delay = delay; + + this.queue.push(entry); + }, + /** Returns true if no animation is set or if the current time is greater than the animation duration, regardless of looping. */ + isComplete: function () { + return !this.current || this.currentTime >= this.current.duration; + } +}; + +spine.SkeletonJson = function (attachmentLoader) { + this.attachmentLoader = attachmentLoader; +}; +spine.SkeletonJson.prototype = { + scale: 1, + readSkeletonData: function (root) { + var skeletonData = new spine.SkeletonData(); + + // Bones. + var bones = root["bones"]; + for (var i = 0, n = bones.length; i < n; i++) { + var boneMap = bones[i]; + var parent = null; + if (boneMap["parent"]) { + parent = skeletonData.findBone(boneMap["parent"]); + if (!parent) throw "Parent bone not found: " + boneMap["parent"]; + } + var boneData = new spine.BoneData(boneMap["name"], parent); + boneData.length = (boneMap["length"] || 0) * this.scale; + boneData.x = (boneMap["x"] || 0) * this.scale; + boneData.y = (boneMap["y"] || 0) * this.scale; + boneData.rotation = (boneMap["rotation"] || 0); + boneData.scaleX = boneMap["scaleX"] || 1; + boneData.scaleY = boneMap["scaleY"] || 1; + skeletonData.bones.push(boneData); + } + + // Slots. + var slots = root["slots"]; + for (var i = 0, n = slots.length; i < n; i++) { + var slotMap = slots[i]; + var boneData = skeletonData.findBone(slotMap["bone"]); + if (!boneData) throw "Slot bone not found: " + slotMap["bone"]; + var slotData = new spine.SlotData(slotMap["name"], boneData); + + var color = slotMap["color"]; + if (color) { + slotData.r = spine.SkeletonJson.toColor(color, 0); + slotData.g = spine.SkeletonJson.toColor(color, 1); + slotData.b = spine.SkeletonJson.toColor(color, 2); + slotData.a = spine.SkeletonJson.toColor(color, 3); + } + + slotData.attachmentName = slotMap["attachment"]; + + skeletonData.slots.push(slotData); + } + + // Skins. + var skins = root["skins"]; + for (var skinName in skins) { + if (!skins.hasOwnProperty(skinName)) continue; + var skinMap = skins[skinName]; + var skin = new spine.Skin(skinName); + for (var slotName in skinMap) { + if (!skinMap.hasOwnProperty(slotName)) continue; + var slotIndex = skeletonData.findSlotIndex(slotName); + var slotEntry = skinMap[slotName]; + for (var attachmentName in slotEntry) { + if (!slotEntry.hasOwnProperty(attachmentName)) continue; + var attachment = this.readAttachment(skin, attachmentName, slotEntry[attachmentName]); + if (attachment != null) skin.addAttachment(slotIndex, attachmentName, attachment); + } + } + skeletonData.skins.push(skin); + if (skin.name == "default") skeletonData.defaultSkin = skin; + } + + // Animations. + var animations = root["animations"]; + for (var animationName in animations) { + if (!animations.hasOwnProperty(animationName)) continue; + this.readAnimation(animationName, animations[animationName], skeletonData); + } + + return skeletonData; + }, + readAttachment: function (skin, name, map) { + name = map["name"] || name; + + var type = spine.AttachmentType[map["type"] || "region"]; + + // @ekelokorpi + // var attachment = this.attachmentLoader.newAttachment(skin, type, name); + var attachment = new spine.RegionAttachment(); + + // @Doormat23 + // add the name of the attachment + attachment.name = name; + + if (type == spine.AttachmentType.region) { + attachment.x = (map["x"] || 0) * this.scale; + attachment.y = (map["y"] || 0) * this.scale; + attachment.scaleX = map["scaleX"] || 1; + attachment.scaleY = map["scaleY"] || 1; + attachment.rotation = map["rotation"] || 0; + attachment.width = (map["width"] || 32) * this.scale; + attachment.height = (map["height"] || 32) * this.scale; + attachment.updateOffset(); + } + + return attachment; + }, + readAnimation: function (name, map, skeletonData) { + var timelines = []; + var duration = 0; + + var bones = map["bones"]; + for (var boneName in bones) { + if (!bones.hasOwnProperty(boneName)) continue; + var boneIndex = skeletonData.findBoneIndex(boneName); + if (boneIndex == -1) throw "Bone not found: " + boneName; + var boneMap = bones[boneName]; + + for (var timelineName in boneMap) { + if (!boneMap.hasOwnProperty(timelineName)) continue; + var values = boneMap[timelineName]; + if (timelineName == "rotate") { + var timeline = new spine.RotateTimeline(values.length); + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex, valueMap["time"], valueMap["angle"]); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 2 - 2]); + + } else if (timelineName == "translate" || timelineName == "scale") { + var timeline; + var timelineScale = 1; + if (timelineName == "scale") + timeline = new spine.ScaleTimeline(values.length); + else { + timeline = new spine.TranslateTimeline(values.length); + timelineScale = this.scale; + } + timeline.boneIndex = boneIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var x = (valueMap["x"] || 0) * timelineScale; + var y = (valueMap["y"] || 0) * timelineScale; + timeline.setFrame(frameIndex, valueMap["time"], x, y); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 3 - 3]); + + } else + throw "Invalid timeline type for a bone: " + timelineName + " (" + boneName + ")"; + } + } + var slots = map["slots"]; + for (var slotName in slots) { + if (!slots.hasOwnProperty(slotName)) continue; + var slotMap = slots[slotName]; + var slotIndex = skeletonData.findSlotIndex(slotName); + + for (var timelineName in slotMap) { + if (!slotMap.hasOwnProperty(timelineName)) continue; + var values = slotMap[timelineName]; + if (timelineName == "color") { + var timeline = new spine.ColorTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + var color = valueMap["color"]; + var r = spine.SkeletonJson.toColor(color, 0); + var g = spine.SkeletonJson.toColor(color, 1); + var b = spine.SkeletonJson.toColor(color, 2); + var a = spine.SkeletonJson.toColor(color, 3); + timeline.setFrame(frameIndex, valueMap["time"], r, g, b, a); + spine.SkeletonJson.readCurve(timeline, frameIndex, valueMap); + frameIndex++; + } + timelines.push(timeline); + duration = Math.max(duration, timeline.frames[timeline.getFrameCount() * 5 - 5]); + + } else if (timelineName == "attachment") { + var timeline = new spine.AttachmentTimeline(values.length); + timeline.slotIndex = slotIndex; + + var frameIndex = 0; + for (var i = 0, n = values.length; i < n; i++) { + var valueMap = values[i]; + timeline.setFrame(frameIndex++, valueMap["time"], valueMap["name"]); + } + timelines.push(timeline); + // PIXI FIX + duration = Math.max(duration, timeline.frames[Math.floor(timeline.getFrameCount()) - 1]); + } else + throw "Invalid timeline type for a slot: " + timelineName + " (" + slotName + ")"; + } + } + skeletonData.animations.push(new spine.Animation(name, timelines, duration)); + } +}; +spine.SkeletonJson.readCurve = function (timeline, frameIndex, valueMap) { + var curve = valueMap["curve"]; + if (!curve) return; + if (curve == "stepped") + timeline.curves.setStepped(frameIndex); + else if (curve instanceof Array) + timeline.curves.setCurve(frameIndex, curve[0], curve[1], curve[2], curve[3]); +}; +spine.SkeletonJson.toColor = function (hexString, colorIndex) { + if (hexString.length != 8) throw "Color hexidecimal length must be 8, recieved: " + hexString; + return parseInt(hexString.substring(colorIndex * 2, 2), 16) / 255; +}; + +spine.Atlas = function (atlasText, textureLoader) { + this.textureLoader = textureLoader; + this.pages = []; + this.regions = []; + + var reader = new spine.AtlasReader(atlasText); + var tuple = []; + tuple.length = 4; + var page = null; + while (true) { + var line = reader.readLine(); + if (line == null) break; + line = reader.trim(line); + if (line.length == 0) + page = null; + else if (!page) { + page = new spine.AtlasPage(); + page.name = line; + + page.format = spine.Atlas.Format[reader.readValue()]; + + reader.readTuple(tuple); + page.minFilter = spine.Atlas.TextureFilter[tuple[0]]; + page.magFilter = spine.Atlas.TextureFilter[tuple[1]]; + + var direction = reader.readValue(); + page.uWrap = spine.Atlas.TextureWrap.clampToEdge; + page.vWrap = spine.Atlas.TextureWrap.clampToEdge; + if (direction == "x") + page.uWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "y") + page.vWrap = spine.Atlas.TextureWrap.repeat; + else if (direction == "xy") + page.uWrap = page.vWrap = spine.Atlas.TextureWrap.repeat; + + textureLoader.load(page, line); + + this.pages.push(page); + + } else { + var region = new spine.AtlasRegion(); + region.name = line; + region.page = page; + + region.rotate = reader.readValue() == "true"; + + reader.readTuple(tuple); + var x = parseInt(tuple[0]); + var y = parseInt(tuple[1]); + + reader.readTuple(tuple); + var width = parseInt(tuple[0]); + var height = parseInt(tuple[1]); + + region.u = x / page.width; + region.v = y / page.height; + if (region.rotate) { + region.u2 = (x + height) / page.width; + region.v2 = (y + width) / page.height; + } else { + region.u2 = (x + width) / page.width; + region.v2 = (y + height) / page.height; + } + region.x = x; + region.y = y; + region.width = Math.abs(width); + region.height = Math.abs(height); + + if (reader.readTuple(tuple) == 4) { // split is optional + region.splits = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + if (reader.readTuple(tuple) == 4) { // pad is optional, but only present with splits + region.pads = [parseInt(tuple[0]), parseInt(tuple[1]), parseInt(tuple[2]), parseInt(tuple[3])]; + + reader.readTuple(tuple); + } + } + + region.originalWidth = parseInt(tuple[0]); + region.originalHeight = parseInt(tuple[1]); + + reader.readTuple(tuple); + region.offsetX = parseInt(tuple[0]); + region.offsetY = parseInt(tuple[1]); + + region.index = parseInt(reader.readValue()); + + this.regions.push(region); + } + } +}; +spine.Atlas.prototype = { + findRegion: function (name) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) + if (regions[i].name == name) return regions[i]; + return null; + }, + dispose: function () { + var pages = this.pages; + for (var i = 0, n = pages.length; i < n; i++) + this.textureLoader.unload(pages[i].rendererObject); + }, + updateUVs: function (page) { + var regions = this.regions; + for (var i = 0, n = regions.length; i < n; i++) { + var region = regions[i]; + if (region.page != page) continue; + region.u = region.x / page.width; + region.v = region.y / page.height; + if (region.rotate) { + region.u2 = (region.x + region.height) / page.width; + region.v2 = (region.y + region.width) / page.height; + } else { + region.u2 = (region.x + region.width) / page.width; + region.v2 = (region.y + region.height) / page.height; + } + } + } +}; + +spine.Atlas.Format = { + alpha: 0, + intensity: 1, + luminanceAlpha: 2, + rgb565: 3, + rgba4444: 4, + rgb888: 5, + rgba8888: 6 +}; + +spine.Atlas.TextureFilter = { + nearest: 0, + linear: 1, + mipMap: 2, + mipMapNearestNearest: 3, + mipMapLinearNearest: 4, + mipMapNearestLinear: 5, + mipMapLinearLinear: 6 +}; + +spine.Atlas.TextureWrap = { + mirroredRepeat: 0, + clampToEdge: 1, + repeat: 2 +}; + +spine.AtlasPage = function () {}; +spine.AtlasPage.prototype = { + name: null, + format: null, + minFilter: null, + magFilter: null, + uWrap: null, + vWrap: null, + rendererObject: null, + width: 0, + height: 0 +}; + +spine.AtlasRegion = function () {}; +spine.AtlasRegion.prototype = { + page: null, + name: null, + x: 0, y: 0, + width: 0, height: 0, + u: 0, v: 0, u2: 0, v2: 0, + offsetX: 0, offsetY: 0, + originalWidth: 0, originalHeight: 0, + index: 0, + rotate: false, + splits: null, + pads: null, +}; + +spine.AtlasReader = function (text) { + this.lines = text.split(/\r\n|\r|\n/); +}; +spine.AtlasReader.prototype = { + index: 0, + trim: function (value) { + return value.replace(/^\s+|\s+$/g, ""); + }, + readLine: function () { + if (this.index >= this.lines.length) return null; + return this.lines[this.index++]; + }, + readValue: function () { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + return this.trim(line.substring(colon + 1)); + }, + /** Returns the number of tuple values read (2 or 4). */ + readTuple: function (tuple) { + var line = this.readLine(); + var colon = line.indexOf(":"); + if (colon == -1) throw "Invalid line: " + line; + var i = 0, lastMatch= colon + 1; + for (; i < 3; i++) { + var comma = line.indexOf(",", lastMatch); + if (comma == -1) { + if (i == 0) throw "Invalid line: " + line; + break; + } + tuple[i] = this.trim(line.substr(lastMatch, comma - lastMatch)); + lastMatch = comma + 1; + } + tuple[i] = this.trim(line.substring(lastMatch)); + return i + 1; + } +} + +spine.AtlasAttachmentLoader = function (atlas) { + this.atlas = atlas; +} +spine.AtlasAttachmentLoader.prototype = { + newAttachment: function (skin, type, name) { + switch (type) { + case spine.AttachmentType.region: + var region = this.atlas.findRegion(name); + if (!region) throw "Region not found in atlas: " + name + " (" + type + ")"; + var attachment = new spine.RegionAttachment(name); + attachment.rendererObject = region; + attachment.setUVs(region.u, region.v, region.u2, region.v2, region.rotate); + attachment.regionOffsetX = region.offsetX; + attachment.regionOffsetY = region.offsetY; + attachment.regionWidth = region.width; + attachment.regionHeight = region.height; + attachment.regionOriginalWidth = region.originalWidth; + attachment.regionOriginalHeight = region.originalHeight; + return attachment; + } + throw "Unknown attachment type: " + type; + } +} + +PIXI.AnimCache = {}; +spine.Bone.yDown = true; + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + + +/** + * Need to finalize this a bit more but works! Its in but will be working on this feature properly next..:) + * @class CustomRenderable + * @extends DisplayObject + * @constructor + */ +PIXI.CustomRenderable = function() +{ + PIXI.DisplayObject.call( this ); + +} + +// constructor +PIXI.CustomRenderable.constructor = PIXI.CustomRenderable; +PIXI.CustomRenderable.prototype = Object.create( PIXI.DisplayObject.prototype ); + +PIXI.CustomRenderable.prototype.renderCanvas = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.initWebGL = function(renderer) +{ + // override! +} + + +PIXI.CustomRenderable.prototype.renderWebGL = function(renderGroup, projectionMatrix) +{ + // not sure if both needed? but ya have for now! + // override! +} + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.BaseTextureCache = {}; +PIXI.texturesToUpdate = []; +PIXI.texturesToDestroy = []; + +/** + * A texture stores the information that represents an image. All textures have a base texture + * @class BaseTexture + * @extends EventTarget + * @constructor + * @param source {String} the source object (image or canvas) + */ +PIXI.BaseTexture = function(source) +{ + PIXI.EventTarget.call( this ); + + /* + * The url of the texture + * @property imageUrl + * @type String + */ + //this.imageUrl = source.src; + + /** + * [read only] The width of the base texture set when the image has loaded + * @property width + * @type Number + */ + this.width = 100; + /** + * [read only] The height of the base texture set when the image has loaded + * @property height + * @type Number + */ + this.height = 100; + + /** + * The source that is loaded to create the texture + * @property source + * @type Image + */ + this.source = source//new Image(); + + if(!source)return; + + if(this.source instanceof Image) + { + if(this.source.complete) + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + else + { + + var scope = this; + this.source.onload = function(){ + + scope.hasLoaded = true; + scope.width = scope.source.width; + scope.height = scope.source.height; + + // add it to somewhere... + PIXI.texturesToUpdate.push(scope); + scope.dispatchEvent( { type: 'loaded', content: scope } ); + } + // this.image.src = imageUrl; + } + } + else + { + this.hasLoaded = true; + this.width = this.source.width; + this.height = this.source.height; + + PIXI.texturesToUpdate.push(this); + } + + this._powerOf2 = false; + +} + +PIXI.BaseTexture.constructor = PIXI.BaseTexture; + +PIXI.BaseTexture.prototype.destroy = function() +{ + if(this.source instanceof Image) + { + this.source.src = null; + } + this.source = null; + PIXI.texturesToDestroy.push(this); +} + +/** + * + * Helper function that returns a base texture based on an image url + * If the image is not in the base texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return BaseTexture + */ +PIXI.BaseTexture.fromImage = function(imageUrl, crossorigin) +{ + var baseTexture = PIXI.BaseTextureCache[imageUrl]; + if(!baseTexture) + { + var image = new Image(); + if (crossorigin) + { + image.crossOrigin = ''; + } + image.src = imageUrl; + baseTexture = new PIXI.BaseTexture(image); + PIXI.BaseTextureCache[imageUrl] = baseTexture; + } + + return baseTexture; +} + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +PIXI.TextureCache = {}; +PIXI.FrameCache = {}; + +/** + * A texture stores the information that represents an image or part of an image. It cannot be added to the display list directly. To do this use PIXI.Sprite. If no frame is provided then the whole image is used + * @class Texture + * @extends EventTarget + * @constructor + * @param baseTexture {BaseTexture} + * @param frmae {Rectangle} + */ +PIXI.Texture = function(baseTexture, frame) +{ + PIXI.EventTarget.call( this ); + + if(!frame) + { + this.noFrame = true; + frame = new PIXI.Rectangle(0,0,1,1); + } + + this.trim = new PIXI.Point(); + + if(baseTexture instanceof PIXI.Texture) + baseTexture = baseTexture.baseTexture; + + /** + * The base texture of this texture + * @property baseTexture + * @type BaseTexture + */ + this.baseTexture = baseTexture; + + + + /** + * The frame specifies the region of the base texture that this texture uses + * @property frame + * @type #Rectangle + */ + this.frame = frame; + + this.scope = this; + + if(baseTexture.hasLoaded) + { + if(this.noFrame)frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + //console.log(frame) + + this.setFrame(frame); + } + else + { + var scope = this; + baseTexture.addEventListener( 'loaded', function(){ scope.onBaseTextureLoaded()} ); + } +} + +PIXI.Texture.constructor = PIXI.Texture; + +PIXI.Texture.prototype.onBaseTextureLoaded = function(event) +{ + var baseTexture = this.baseTexture; + baseTexture.removeEventListener( 'loaded', this.onLoaded ); + + if(this.noFrame)this.frame = new PIXI.Rectangle(0,0, baseTexture.width, baseTexture.height); + this.noFrame = false; + this.width = this.frame.width; + this.height = this.frame.height; + + this.scope.dispatchEvent( { type: 'update', content: this } ); +} + +PIXI.Texture.prototype.destroy = function(destroyBase) +{ + if(destroyBase)this.baseTexture.destroy(); +} + +/** + * Specifies the rectangle region of the baseTexture + * @method setFrame + * @param frame {Rectangle} + */ +PIXI.Texture.prototype.setFrame = function(frame) +{ + this.frame = frame; + this.width = frame.width; + this.height = frame.height; + + if(frame.x + frame.width > this.baseTexture.width || frame.y + frame.height > this.baseTexture.height) + { + throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this); + } + + this.updateFrame = true; + + PIXI.Texture.frameUpdates.push(this); + //this.dispatchEvent( { type: 'update', content: this } ); +} + +/** + * + * Helper function that returns a texture based on an image url + * If the image is not in the texture cache it will be created and loaded + * @static + * @method fromImage + * @param imageUrl {String} The image url of the texture + * @return Texture + */ +PIXI.Texture.fromImage = function(imageUrl, crossorigin) +{ + var texture = PIXI.TextureCache[imageUrl]; + + if(!texture) + { + texture = new PIXI.Texture(PIXI.BaseTexture.fromImage(imageUrl, crossorigin)); + PIXI.TextureCache[imageUrl] = texture; + } + + return texture; +} + +/** + * + * Helper function that returns a texture based on a frame id + * If the frame id is not in the texture cache an error will be thrown + * @method fromFrame + * @param frameId {String} The frame id of the texture + * @return Texture + */ +PIXI.Texture.fromFrame = function(frameId) +{ + var texture = PIXI.TextureCache[frameId]; + if(!texture)throw new Error("The frameId '"+ frameId +"' does not exist in the texture cache " + this); + return texture; +} + +/** + * + * Helper function that returns a texture based on a canvas element + * If the canvas is not in the texture cache it will be created and loaded + * @static + * @method fromCanvas + * @param canvas {Canvas} The canvas element source of the texture + * @return Texture + */ +PIXI.Texture.fromCanvas = function(canvas) +{ + var baseTexture = new PIXI.BaseTexture(canvas); + return new PIXI.Texture(baseTexture); +} + + +/** + * + * Adds a texture to the textureCache. + * @static + * @method addTextureToCache + * @param texture {Texture} + * @param id {String} the id that the texture will be stored against. + */ +PIXI.Texture.addTextureToCache = function(texture, id) +{ + PIXI.TextureCache[id] = texture; +} + +/** + * + * Remove a texture from the textureCache. + * @static + * @method removeTextureFromCache + * @param id {String} the id of the texture to be removed + * @return {Texture} the texture that was removed + */ +PIXI.Texture.removeTextureFromCache = function(id) +{ + var texture = PIXI.TextureCache[id] + PIXI.TextureCache[id] = null; + return texture; +} + +// this is more for webGL.. it contains updated frames.. +PIXI.Texture.frameUpdates = []; + + +/** + * @author Mat Groves http://matgroves.com/ @Doormat23 + */ + +/** + * A RenderTexture is a special texture that allows any pixi displayObject to be rendered to it. + * @class RenderTexture + * @extends Texture + * @constructor + * @param width {Number} + * @param height {Number} + */ +PIXI.RenderTexture = function(width, height) +{ + PIXI.EventTarget.call( this ); + + this.width = width || 100; + this.height = height || 100; + + this.indetityMatrix = PIXI.mat3.create(); + + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + if(PIXI.gl) + { + this.initWebGL(); + } + else + { + this.initCanvas(); + } +} + +PIXI.RenderTexture.constructor = PIXI.RenderTexture; +PIXI.RenderTexture.prototype = Object.create( PIXI.Texture.prototype ); + +PIXI.RenderTexture.prototype.initWebGL = function() +{ + var gl = PIXI.gl; + this.glFramebuffer = gl.createFramebuffer(); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + this.glFramebuffer.width = this.width; + this.glFramebuffer.height = this.height; + + this.baseTexture = new PIXI.BaseTexture(); + + this.baseTexture.width = this.width; + this.baseTexture.height = this.height; + + this.baseTexture._glTexture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, this.baseTexture._glTexture); + + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, this.width, this.height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null); + + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); + gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); + + this.baseTexture.isRender = true; + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, this.baseTexture._glTexture, 0); + + // create a projection matrix.. + this.projectionMatrix = PIXI.mat4.create(); + + this.projectionMatrix[5] = 2/this.height// * 0.5; + this.projectionMatrix[13] = -1; + + this.projectionMatrix[0] = 2/this.width; + this.projectionMatrix[12] = -1; + + // set the correct render function.. + this.render = this.renderWebGL; +} + +PIXI.RenderTexture.prototype.initCanvas = function() +{ + this.renderer = new PIXI.CanvasRenderer(this.width, this.height, null, 0); + + this.baseTexture = new PIXI.BaseTexture(this.renderer.view); + this.frame = new PIXI.Rectangle(0, 0, this.width, this.height); + + this.render = this.renderCanvas; +} + +/** + * This function will draw the display object to the texture. + * @method render + * @param displayObject {DisplayObject} + * @param clear {Boolean} If true the texture will be cleared before the displayObject is drawn + */ +PIXI.RenderTexture.prototype.renderWebGL = function(displayObject, clear) +{ + var gl = PIXI.gl; + + // enable the alpha color mask.. + gl.colorMask(true, true, true, true); + + gl.viewport(0, 0, this.width, this.height); + + gl.bindFramebuffer(gl.FRAMEBUFFER, this.glFramebuffer ); + + if(clear) + { + gl.clearColor(0,0,0, 0); + gl.clear(gl.COLOR_BUFFER_BIT); + } + + // THIS WILL MESS WITH HIT TESTING! + var children = displayObject.children; + + //TODO -? create a new one??? dont think so! + displayObject.worldTransform = PIXI.mat3.create();//sthis.indetityMatrix; + + for(var i=0,j=children.length; i